Index: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AboutDialog.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/AvailableOperatorsForm.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/EditorForm.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLab.AdvancedOptimizationFrontend.csproj
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLab.AdvancedOptimizationFrontend.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLab.AdvancedOptimizationFrontend.csproj	(revision 1529)
@@ -0,0 +1,186 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.AdvancedOptimizationFrontend-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLabAdvancedOptimizationFrontendApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLabAdvancedOptimizationFrontendApplication.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLabAdvancedOptimizationFrontendApplication.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLabAdvancedOptimizationFrontendPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLabAdvancedOptimizationFrontendPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/HeuristicLabAdvancedOptimizationFrontendPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/Resources.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/Resources.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/Resources.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/Resources.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/Resources.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/Properties/Resources.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/ViewForm.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/WeifenLuo.WinFormsUI.Docking License.txt
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/WeifenLuo.WinFormsUI.Docking License.txt	(revision 1529)
+++ /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/3.2/WeifenLuo.WinFormsUI.Docking License.txt	(revision 1529)
@@ -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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,117 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,316 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,171 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,219 +1,0 @@
-<?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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,88 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,100 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,434 +1,0 @@
-<?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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLab.AdvancedOptimizationFrontend.csproj
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLab.AdvancedOptimizationFrontend.csproj	(revision 1528)
+++ 	(revision )
@@ -1,186 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.AdvancedOptimizationFrontend-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendApplication.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/MainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/MainForm.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,364 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/MainForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,308 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/MainForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/MainForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,449 +1,0 @@
-<?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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,86 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,92 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,434 +1,0 @@
-<?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: unk/sources/HeuristicLab.AdvancedOptimizationFrontend/WeifenLuo.WinFormsUI.Docking License.txt
===================================================================
--- /trunk/sources/HeuristicLab.AdvancedOptimizationFrontend/WeifenLuo.WinFormsUI.Docking License.txt	(revision 1528)
+++ 	(revision )
@@ -1,9 +1,0 @@
-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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/HeuristicLab.Assignment.QAP.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/HeuristicLab.Assignment.QAP.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/HeuristicLab.Assignment.QAP.csproj	(revision 1529)
@@ -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>{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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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")]
+[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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPInjectorView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPParser.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPParser.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Assignment.QAP/3.2/QAPPlugin.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Assignment.QAP/HeuristicLab.Assignment.QAP.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/HeuristicLab.Assignment.QAP.csproj	(revision 1528)
+++ 	(revision )
@@ -1,143 +1,0 @@
-﻿<?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>{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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <OutputPath>bin\x86\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <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: unk/sources/HeuristicLab.Assignment.QAP/QAPEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Assignment.QAP/QAPInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,61 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Assignment.QAP/QAPInjectorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPInjectorView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,204 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Assignment.QAP/QAPInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPInjectorView.cs	(revision 1528)
+++ 	(revision )
@@ -1,107 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Assignment.QAP/QAPInjectorView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPInjectorView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.Assignment.QAP/QAPParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPParser.cs	(revision 1528)
+++ 	(revision )
@@ -1,83 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Assignment.QAP/QAPPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Assignment.QAP/QAPPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.BitVector/3.2/BitVectorCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/BitVectorCrossoverBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/BitVectorCrossoverBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.BitVector/3.2/BitVectorManipulatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/BitVectorManipulatorBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/BitVectorManipulatorBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.BitVector/3.2/FlipManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/FlipManipulator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/FlipManipulator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.BitVector/3.2/HeuristicLab.BitVector.csproj
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/HeuristicLab.BitVector.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/HeuristicLab.BitVector.csproj	(revision 1529)
@@ -0,0 +1,122 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.BitVector-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.BitVector/3.2/HeuristicLabBitVectorPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/HeuristicLabBitVectorPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/HeuristicLabBitVectorPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.BitVector/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.BitVector/3.2/RandomBitVectorGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/RandomBitVectorGenerator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/RandomBitVectorGenerator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.BitVector/3.2/SinglePointCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/3.2/SinglePointCrossover.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.BitVector/3.2/SinglePointCrossover.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.BitVector/BitVectorCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/BitVectorCrossoverBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,72 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.BitVector/BitVectorManipulatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/BitVectorManipulatorBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.BitVector/FlipManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/FlipManipulator.cs	(revision 1528)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.BitVector/HeuristicLab.BitVector.csproj
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/HeuristicLab.BitVector.csproj	(revision 1528)
+++ 	(revision )
@@ -1,122 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.BitVector-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.BitVector/HeuristicLabBitVectorPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/HeuristicLabBitVectorPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.BitVector/RandomBitVectorGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/RandomBitVectorGenerator.cs	(revision 1528)
+++ 	(revision )
@@ -1,77 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.BitVector/SinglePointCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/SinglePointCrossover.cs	(revision 1528)
+++ 	(revision )
@@ -1,72 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChart.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChart.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChart.cs	(revision 1529)
@@ -0,0 +1,277 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General 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;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public class BubbleChart : Chart {
+    private const string X_JITTER = "__X_JITTER";
+    private const string Y_JITTER = "__Y_JITTER";
+    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<ResultsEntry> records;
+    private Results results;
+    private Dictionary<IPrimitive, ResultsEntry> primitiveToEntryDictionary;
+    private Dictionary<ResultsEntry, IPrimitive> entryToPrimitiveDictionary;
+    private Random random = new Random();
+    private Group points;
+
+    public BubbleChart(Results results, PointD lowerLeft, PointD upperRight)
+      : base(lowerLeft, upperRight) {
+      records = new List<ResultsEntry>();
+      primitiveToEntryDictionary = new Dictionary<IPrimitive, ResultsEntry>();
+      entryToPrimitiveDictionary = new Dictionary<ResultsEntry, IPrimitive>();
+      this.results = results;
+
+      foreach (var resultsEntry in results.GetEntries()) {
+        if (resultsEntry.Get(X_JITTER) == null)
+          resultsEntry.Set(X_JITTER, random.NextDouble() * 2.0 - 1.0);
+        if (resultsEntry.Get(Y_JITTER) == null)
+          resultsEntry.Set(Y_JITTER, random.NextDouble() * 2.0 - 1.0);
+        records.Add(resultsEntry);
+      }
+
+      results.Changed += new EventHandler(results_Changed);
+    }
+
+    void results_Changed(object sender, EventArgs e) {
+      Repaint();
+      EnforceUpdate();
+    }
+
+    public BubbleChart(Results results, double x1, double y1, double x2, double y2)
+      : this(results, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+
+    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;
+      double maxSize = 1;
+      double minSize = 1;
+      if (sizeDimension != null && results.OrdinalVariables.Contains(sizeDimension)) {
+        var sizes = records
+          .Select(x => Convert.ToDouble(x.Get(sizeDimension)))
+          .Where(size => !double.IsInfinity(size) && size != double.MaxValue && size != double.MinValue)
+          .OrderBy(r => r);
+        minSize = sizes.ElementAt((int)(sizes.Count() * 0.1));
+        maxSize = sizes.ElementAt((int)(sizes.Count() * 0.9));
+      } else {
+        minSize = 1;
+        maxSize = 1;
+      }
+      UpdateEnabled = false;
+      Group.Clear();
+      primitiveToEntryDictionary.Clear();
+      entryToPrimitiveDictionary.Clear();
+      points = new Group(this);
+      Group.Add(new Axis(this, 0, 0, AxisType.Both));
+      UpdateViewSize(0, 0, 5);
+      foreach (ResultsEntry r in records) {
+        double x, y;
+        int size;
+        if (results.OrdinalVariables.Contains(xDimension)) {
+          x = Convert.ToDouble(r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
+        } else if (results.CategoricalVariables.Contains(xDimension)) {
+          x = results.IndexOfCategoricalValue(xDimension, r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
+        } else {
+          x = double.NaN;
+        }
+        if (results.OrdinalVariables.Contains(yDimension)) {
+          y = Convert.ToDouble(r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
+        } else if (results.CategoricalVariables.Contains(yDimension)) {
+          y = results.IndexOfCategoricalValue(yDimension, r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
+        } else {
+          y = double.NaN;
+        }
+        size = CalculateSize(Convert.ToDouble(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();
+          primitiveToEntryDictionary[c] = r;
+          entryToPrimitiveDictionary[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;
+      if (Math.Abs(maxSize - minSize) < 1.0E-10) return minBubbleSize;
+      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 ResultsEntry GetResultsEntry(Point point) {
+      ResultsEntry r = null;
+      IPrimitive p = points.GetPrimitive(TransformPixelToWorld(point));
+      if (p != null) {
+        primitiveToEntryDictionary.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)) {
+            ResultsEntry r;
+            primitiveToEntryDictionary.TryGetValue(p, out r);
+            if (r != null) r.ToggleSelected();
+          }
+        }
+        if (primitives.Count() > 0) results.FireChanged();
+      } else {
+        base.MouseDrag(start, end, button);
+      }
+    }
+
+    public override void MouseClick(Point point, MouseButtons button) {
+      if (button == MouseButtons.Left) {
+        ResultsEntry r = GetResultsEntry(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) {
+        ResultsEntry entry = GetResultsEntry(point);
+        if (entry != null) {
+          string serializedData = (string)entry.Get(Ontology.PredicateSerializedData.Uri.Replace(Ontology.CedmaNameSpace, ""));
+          var model = (IItem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(serializedData));
+          PluginManager.ControlManager.ShowControl(model.CreateView());
+        }
+      } else {
+        base.MouseDoubleClick(point, button);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartControl.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.Designer.cs	(revision 1529)
@@ -0,0 +1,206 @@
+﻿namespace HeuristicLab.CEDMA.Charting {
+  partial class BubbleChartView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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.bubbleChartControl = new HeuristicLab.CEDMA.Charting.BubbleChartControl();
+      ((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.axisComboBox_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.axisComboBox_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);
+      // 
+      // bubbleChartControl
+      // 
+      this.bubbleChartControl.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.bubbleChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.bubbleChartControl.Chart = null;
+      this.bubbleChartControl.Location = new System.Drawing.Point(3, 81);
+      this.bubbleChartControl.Name = "bubbleChartControl";
+      this.bubbleChartControl.ScaleOnResize = true;
+      this.bubbleChartControl.Size = new System.Drawing.Size(444, 304);
+      this.bubbleChartControl.TabIndex = 17;
+      // 
+      // BubbleChartView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.bubbleChartControl);
+      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 = "BubbleChartView";
+      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 BubbleChartControl bubbleChartControl;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.cs	(revision 1529)
@@ -0,0 +1,72 @@
+﻿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.CEDMA.Charting;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public class BubbleChartViewFactory : IResultsViewFactory {
+    #region IResultsViewFactory Members
+
+    public string Name {
+      get { return "Bubble chart"; }
+    }
+
+    public IControl CreateView(Results results) {
+      return new BubbleChartView(results);
+    }
+
+    #endregion
+  }
+
+  public partial class BubbleChartView : ViewBase {
+    private Results Results {
+      get { return (Results)Item; }
+      set { Item = value; }
+    }
+    private const string CONSTANT_SIZE = "<constant>";
+    private Label pleaseSelectAxisLabel = new Label();
+    public BubbleChartView(Results results) {
+      InitializeComponent();
+      Results = results;
+      bubbleChartControl.Chart = new BubbleChart(Results, 0, 0, 100, 100);
+      xAxisComboBox.Items.AddRange(Results.OrdinalVariables);
+      xAxisComboBox.Items.AddRange(Results.CategoricalVariables);
+      yAxisComboBox.Items.AddRange(Results.OrdinalVariables);
+      yAxisComboBox.Items.AddRange(Results.CategoricalVariables);
+      sizeComboBox.Items.Add(CONSTANT_SIZE);
+      sizeComboBox.Items.AddRange(Results.OrdinalVariables);
+      sizeComboBox.SelectedItem = sizeComboBox.Items[0];
+      yAxisComboBox.SelectedItem = yAxisComboBox.Items[0];
+      xAxisComboBox.SelectedItem = xAxisComboBox.Items[0];
+    }
+
+    private void axisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      if (xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
+      bubbleChartControl.Chart.ShowXvsY((string)xAxisComboBox.SelectedItem, (string)yAxisComboBox.SelectedItem);
+    }
+
+    private void jitterTrackBar_ValueChanged(object sender, EventArgs e) {
+      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) {
+      bubbleChartControl.Chart.SetBubbleSizeDimension((string)sizeComboBox.SelectedItem, invertCheckbox.Checked);
+      UpdateChart();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/BubbleChartView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HeuristicLab.CEDMA.Charting.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HeuristicLab.CEDMA.Charting.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HeuristicLab.CEDMA.Charting.csproj	(revision 1529)
@@ -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>{1BF17271-5350-476A-8F6D-FC74FA3E82CA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.Charting</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.Charting-3.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="BubbleChartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BubbleChartView.Designer.cs">
+      <DependentUpon>BubbleChartView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabCedmaChartingPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </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.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.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>
+    </EmbeddedResource>
+    <EmbeddedResource Include="BubbleChartView.resx">
+      <DependentUpon>BubbleChartView.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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HeuristicLabCedmaChartingPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HeuristicLabCedmaChartingPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HeuristicLabCedmaChartingPlugin.cs	(revision 1529)
@@ -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.CEDMA.Charting {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Charting-3.3")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Charting-3.3.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.Core-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Charting-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Charting.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
+  public class HeuristicLabCedmaCorePlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/Histogram.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/Histogram.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/Histogram.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/HistogramControl.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/ModelView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1528)
+++ 	(revision )
@@ -1,277 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Charting {
-  public class BubbleChart : Chart {
-    private const string X_JITTER = "__X_JITTER";
-    private const string Y_JITTER = "__Y_JITTER";
-    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<ResultsEntry> records;
-    private Results results;
-    private Dictionary<IPrimitive, ResultsEntry> primitiveToEntryDictionary;
-    private Dictionary<ResultsEntry, IPrimitive> entryToPrimitiveDictionary;
-    private Random random = new Random();
-    private Group points;
-
-    public BubbleChart(Results results, PointD lowerLeft, PointD upperRight)
-      : base(lowerLeft, upperRight) {
-      records = new List<ResultsEntry>();
-      primitiveToEntryDictionary = new Dictionary<IPrimitive, ResultsEntry>();
-      entryToPrimitiveDictionary = new Dictionary<ResultsEntry, IPrimitive>();
-      this.results = results;
-
-      foreach (var resultsEntry in results.GetEntries()) {
-        if (resultsEntry.Get(X_JITTER) == null)
-          resultsEntry.Set(X_JITTER, random.NextDouble() * 2.0 - 1.0);
-        if (resultsEntry.Get(Y_JITTER) == null)
-          resultsEntry.Set(Y_JITTER, random.NextDouble() * 2.0 - 1.0);
-        records.Add(resultsEntry);
-      }
-
-      results.Changed += new EventHandler(results_Changed);
-    }
-
-    void results_Changed(object sender, EventArgs e) {
-      Repaint();
-      EnforceUpdate();
-    }
-
-    public BubbleChart(Results results, double x1, double y1, double x2, double y2)
-      : this(results, new PointD(x1, y1), new PointD(x2, y2)) {
-    }
-
-    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;
-      double maxSize = 1;
-      double minSize = 1;
-      if (sizeDimension != null && results.OrdinalVariables.Contains(sizeDimension)) {
-        var sizes = records
-          .Select(x => Convert.ToDouble(x.Get(sizeDimension)))
-          .Where(size => !double.IsInfinity(size) && size != double.MaxValue && size != double.MinValue)
-          .OrderBy(r => r);
-        minSize = sizes.ElementAt((int)(sizes.Count() * 0.1));
-        maxSize = sizes.ElementAt((int)(sizes.Count() * 0.9));
-      } else {
-        minSize = 1;
-        maxSize = 1;
-      }
-      UpdateEnabled = false;
-      Group.Clear();
-      primitiveToEntryDictionary.Clear();
-      entryToPrimitiveDictionary.Clear();
-      points = new Group(this);
-      Group.Add(new Axis(this, 0, 0, AxisType.Both));
-      UpdateViewSize(0, 0, 5);
-      foreach (ResultsEntry r in records) {
-        double x, y;
-        int size;
-        if (results.OrdinalVariables.Contains(xDimension)) {
-          x = Convert.ToDouble(r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
-        } else if (results.CategoricalVariables.Contains(xDimension)) {
-          x = results.IndexOfCategoricalValue(xDimension, r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
-        } else {
-          x = double.NaN;
-        }
-        if (results.OrdinalVariables.Contains(yDimension)) {
-          y = Convert.ToDouble(r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
-        } else if (results.CategoricalVariables.Contains(yDimension)) {
-          y = results.IndexOfCategoricalValue(yDimension, r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
-        } else {
-          y = double.NaN;
-        }
-        size = CalculateSize(Convert.ToDouble(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();
-          primitiveToEntryDictionary[c] = r;
-          entryToPrimitiveDictionary[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;
-      if (Math.Abs(maxSize - minSize) < 1.0E-10) return minBubbleSize;
-      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 ResultsEntry GetResultsEntry(Point point) {
-      ResultsEntry r = null;
-      IPrimitive p = points.GetPrimitive(TransformPixelToWorld(point));
-      if (p != null) {
-        primitiveToEntryDictionary.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)) {
-            ResultsEntry r;
-            primitiveToEntryDictionary.TryGetValue(p, out r);
-            if (r != null) r.ToggleSelected();
-          }
-        }
-        if (primitives.Count() > 0) results.FireChanged();
-      } else {
-        base.MouseDrag(start, end, button);
-      }
-    }
-
-    public override void MouseClick(Point point, MouseButtons button) {
-      if (button == MouseButtons.Left) {
-        ResultsEntry r = GetResultsEntry(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) {
-        ResultsEntry entry = GetResultsEntry(point);
-        if (entry != null) {
-          string serializedData = (string)entry.Get(Ontology.PredicateSerializedData.Uri.Replace(Ontology.CedmaNameSpace, ""));
-          var model = (IItem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(serializedData));
-          PluginManager.ControlManager.ShowControl(model.CreateView());
-        }
-      } else {
-        base.MouseDoubleClick(point, button);
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChartControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartControl.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,133 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChartControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartControl.cs	(revision 1528)
+++ 	(revision )
@@ -1,176 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChartControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartControl.resx	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,206 +1,0 @@
-﻿namespace HeuristicLab.CEDMA.Charting {
-  partial class BubbleChartView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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.bubbleChartControl = new HeuristicLab.CEDMA.Charting.BubbleChartControl();
-      ((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.axisComboBox_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.axisComboBox_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);
-      // 
-      // bubbleChartControl
-      // 
-      this.bubbleChartControl.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.bubbleChartControl.BackColor = System.Drawing.SystemColors.Control;
-      this.bubbleChartControl.Chart = null;
-      this.bubbleChartControl.Location = new System.Drawing.Point(3, 81);
-      this.bubbleChartControl.Name = "bubbleChartControl";
-      this.bubbleChartControl.ScaleOnResize = true;
-      this.bubbleChartControl.Size = new System.Drawing.Size(444, 304);
-      this.bubbleChartControl.TabIndex = 17;
-      // 
-      // BubbleChartView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.bubbleChartControl);
-      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 = "BubbleChartView";
-      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 BubbleChartControl bubbleChartControl;
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.cs	(revision 1528)
+++ 	(revision )
@@ -1,72 +1,0 @@
-﻿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.CEDMA.Charting;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.CEDMA.Charting {
-  public class BubbleChartViewFactory : IResultsViewFactory {
-    #region IResultsViewFactory Members
-
-    public string Name {
-      get { return "Bubble chart"; }
-    }
-
-    public IControl CreateView(Results results) {
-      return new BubbleChartView(results);
-    }
-
-    #endregion
-  }
-
-  public partial class BubbleChartView : ViewBase {
-    private Results Results {
-      get { return (Results)Item; }
-      set { Item = value; }
-    }
-    private const string CONSTANT_SIZE = "<constant>";
-    private Label pleaseSelectAxisLabel = new Label();
-    public BubbleChartView(Results results) {
-      InitializeComponent();
-      Results = results;
-      bubbleChartControl.Chart = new BubbleChart(Results, 0, 0, 100, 100);
-      xAxisComboBox.Items.AddRange(Results.OrdinalVariables);
-      xAxisComboBox.Items.AddRange(Results.CategoricalVariables);
-      yAxisComboBox.Items.AddRange(Results.OrdinalVariables);
-      yAxisComboBox.Items.AddRange(Results.CategoricalVariables);
-      sizeComboBox.Items.Add(CONSTANT_SIZE);
-      sizeComboBox.Items.AddRange(Results.OrdinalVariables);
-      sizeComboBox.SelectedItem = sizeComboBox.Items[0];
-      yAxisComboBox.SelectedItem = yAxisComboBox.Items[0];
-      xAxisComboBox.SelectedItem = xAxisComboBox.Items[0];
-    }
-
-    private void axisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      UpdateChart();
-    }
-
-    private void UpdateChart() {
-      if (xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
-      bubbleChartControl.Chart.ShowXvsY((string)xAxisComboBox.SelectedItem, (string)yAxisComboBox.SelectedItem);
-    }
-
-    private void jitterTrackBar_ValueChanged(object sender, EventArgs e) {
-      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) {
-      bubbleChartControl.Chart.SetBubbleSizeDimension((string)sizeComboBox.SelectedItem, invertCheckbox.Checked);
-      UpdateChart();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1528)
+++ 	(revision )
@@ -1,166 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="BubbleChartView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="BubbleChartView.Designer.cs">
-      <DependentUpon>BubbleChartView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="HeuristicLabCedmaChartingPlugin.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </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.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.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>
-    </EmbeddedResource>
-    <EmbeddedResource Include="BubbleChartView.resx">
-      <DependentUpon>BubbleChartView.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: unk/sources/HeuristicLab.CEDMA.Charting/HeuristicLabCedmaChartingPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/HeuristicLabCedmaChartingPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.CEDMA.Charting-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.CEDMA.Core-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Charting-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Charting.Data-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
-  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
-  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
-  public class HeuristicLabCedmaCorePlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Charting/Histogram.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/Histogram.cs	(revision 1528)
+++ 	(revision )
@@ -1,192 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.CEDMA.Charting/HistogramControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/HistogramControl.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,89 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.CEDMA.Charting/HistogramControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/HistogramControl.cs	(revision 1528)
+++ 	(revision )
@@ -1,96 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.Charting/HistogramControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/HistogramControl.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Charting/ModelView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/ModelView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,94 +1,0 @@
-﻿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: unk/sources/HeuristicLab.CEDMA.Charting/ModelView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/ModelView.cs	(revision 1528)
+++ 	(revision )
@@ -1,121 +1,0 @@
-﻿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: unk/sources/HeuristicLab.CEDMA.Charting/ModelView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/ModelView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Console.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Console.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Console.cs	(revision 1529)
@@ -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 System.Xml;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Console : ItemBase, IEditable {
+    private string serverUri;
+    public string ServerUri {
+      get { return serverUri; }
+    }
+
+    private DataSetList dataSetList;
+    public DataSetList DataSetList {
+      get { return dataSetList; }
+    }
+
+    public Console()
+      : base() {
+      dataSetList = new DataSetList();
+    }
+
+    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
+
+    internal void Connect(string serverUri) {
+      DataSetList.Store = new StoreProxy(serverUri);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ConsoleEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ConsoleEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ConsoleEditor.cs	(revision 1529)
@@ -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.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 Panel serverPanel;
+    private Console console;
+
+    public ConsoleEditor(Console console) {
+      InitializeComponent();
+      this.console = console;
+      serverPanel.Enabled = false;
+    }
+
+    #region autogenerated code
+    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.serverPanel = new System.Windows.Forms.Panel();
+      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);
+      // 
+      // serverPanel
+      // 
+      this.serverPanel.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.serverPanel.Location = new System.Drawing.Point(3, 29);
+      this.serverPanel.Name = "serverPanel";
+      this.serverPanel.Size = new System.Drawing.Size(439, 157);
+      this.serverPanel.TabIndex = 4;
+      // 
+      // ConsoleEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.serverPanel);
+      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();
+
+    }
+
+    #endregion
+
+    private void connectButton_Click(object sender, EventArgs e) {
+      try {
+        console.Connect(uriTextBox.Text);
+        connectButton.Enabled = false;
+        serverPanel.Enabled = true;
+        serverPanel.Controls.Clear();
+        Control dataSetListView = (Control)console.DataSetList.CreateView();
+        dataSetListView.Dock = DockStyle.Fill;
+        serverPanel.Controls.Add(dataSetListView);
+      } catch(CommunicationException ex) {
+        MessageBox.Show("Exception while trying to connect to " + uriTextBox.Text + "\n" + ex.Message);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ConsoleEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ConsoleEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ConsoleEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSet.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSet.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSet.cs	(revision 1529)
@@ -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;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class DataSet : IViewable {
+    public IStore Store { get; set; }
+
+    private Guid guid;
+    public Guid Guid {
+      get { return guid; }
+    }
+
+    private string name;
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    private Problem problem;
+    public Problem Problem {
+      get {
+        // lazy loading of problem from DB
+        if (problem == null) {
+          var persistedData = Store.Query(
+            "<" + Ontology.CedmaNameSpace + Guid + "> <" + Ontology.PredicateSerializedData.Uri + "> ?SerializedData .", 0, 10);
+          if (persistedData.Count() == 1) {
+            Literal persistedLiteral = (Literal)persistedData.First().Get("SerializedData");
+            this.problem = (Problem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String((string)persistedLiteral.Value));
+          } else
+            this.problem = new Problem(); // no entry in the DB => create a new problem
+        }
+        return problem;
+      }
+    }
+
+    public DataSet()
+      : base() {
+      guid = Guid.NewGuid();
+      name = "Data set";
+    }
+
+    public DataSet(IStore store, Entity dataSetEntity)
+      : this() {
+      Store = store;
+      guid = new Guid(dataSetEntity.Uri.Remove(0, Ontology.CedmaNameSpace.Length));
+      name = guid.ToString();
+    }
+
+    public void Activate() {
+      Entity myEntity = new Entity(Ontology.CedmaNameSpace + Guid);
+      Store.Add(new Statement(myEntity, Ontology.PredicateInstanceOf, Ontology.TypeDataSet));
+      Store.Add(new Statement(myEntity, Ontology.PredicateSerializedData, new Literal(Convert.ToBase64String(PersistenceManager.SaveToGZip(problem)))));
+      Store.Add(new Statement(myEntity, Ontology.PredicateName, new Literal(name)));
+    }
+
+    public IView CreateView() {
+      return new DataSetView(this);
+    }
+
+    internal Results GetResults() {
+      Results results = new Results(Store);
+      results.FilterDataSet(new Entity(Ontology.CedmaNameSpace + Guid));
+      return results;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetList.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetList.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetList.cs	(revision 1529)
@@ -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.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 DataSetList : ItemBase, IEnumerable<DataSet> {
+    private List<DataSet> dataSetList;
+    private IStore store;
+    public IStore Store {
+      get { return store; }
+      set {
+        store = value;
+        Action reload = ReloadList;
+        lock (dataSetList) {
+          dataSetList.Clear();
+        }
+        reload.BeginInvoke(null, null);
+      }
+    }
+
+    public DataSetList()
+      : base() {
+      dataSetList = new List<DataSet>();
+    }
+
+    public override IView CreateView() {
+      return new DataSetListView(this);
+    }
+
+    private void ReloadList() {
+      HeuristicLab.CEDMA.DB.Interfaces.Variable dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
+      HeuristicLab.CEDMA.DB.Interfaces.Variable dataSetNameVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("Name");
+      var bindings = store.Query(
+        "?DataSet <"+Ontology.PredicateInstanceOf.Uri+"> <"+Ontology.TypeDataSet.Uri+"> ." + Environment.NewLine +
+        "?DataSet <"+Ontology.PredicateName.Uri+"> ?Name .",0, 100);
+      foreach (var binding in bindings) {
+        DataSet d = new DataSet(store, (Entity)binding.Get("DataSet"));
+        d.Name = (string)((Literal)binding.Get("Name")).Value;
+        lock (dataSetList) {
+          dataSetList.Add(d);
+        }
+        FireChanged();
+      }
+    }
+
+    public IEnumerator<DataSet> GetEnumerator() {
+      List<DataSet> dataSets = new List<DataSet>();
+      lock (dataSets) {
+        dataSets.AddRange(dataSetList);
+      }
+      return dataSets.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    public void Add(DataSet dataSet) {
+      dataSetList.Add(dataSet);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.Designer.cs	(revision 1529)
@@ -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.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Core {
+  partial class DataSetListView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any 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.refreshButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.dataSetsGroupBox = new System.Windows.Forms.GroupBox();
+      this.dataSetsListView = new System.Windows.Forms.ListView();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.dataSetsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // 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);
+      // 
+      // 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);
+      // 
+      // 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.dataSetsGroupBox);
+      // 
+      // 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;
+      // 
+      // dataSetsGroupBox
+      // 
+      this.dataSetsGroupBox.Controls.Add(this.dataSetsListView);
+      this.dataSetsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataSetsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.dataSetsGroupBox.Name = "dataSetsGroupBox";
+      this.dataSetsGroupBox.Size = new System.Drawing.Size(135, 155);
+      this.dataSetsGroupBox.TabIndex = 0;
+      this.dataSetsGroupBox.TabStop = false;
+      this.dataSetsGroupBox.Text = "&Data Sets";
+      // 
+      // dataSetsListView
+      // 
+      this.dataSetsListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataSetsListView.Location = new System.Drawing.Point(3, 16);
+      this.dataSetsListView.MultiSelect = false;
+      this.dataSetsListView.Name = "dataSetsListView";
+      this.dataSetsListView.Size = new System.Drawing.Size(129, 136);
+      this.dataSetsListView.TabIndex = 0;
+      this.dataSetsListView.UseCompatibleStateImageBehavior = false;
+      this.dataSetsListView.View = System.Windows.Forms.View.List;
+      this.dataSetsListView.SelectedIndexChanged += new System.EventHandler(this.dataSetsListView_SelectedIndexChanged);
+      // 
+      // 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";
+      // 
+      // DataSetListView
+      // 
+      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 = "DataSetListView";
+      this.Size = new System.Drawing.Size(276, 184);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.dataSetsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox dataSetsGroupBox;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.Button addButton;
+    private Button refreshButton;
+    private ListView dataSetsListView;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.cs	(revision 1529)
@@ -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 HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class DataSetListView : ViewBase {
+    public DataSetList DataSetList {
+      get { return (DataSetList)Item; }
+      set { base.Item = value; }
+    }
+
+    public DataSetListView() {
+      InitializeComponent();
+      Caption = "DataSet View";
+    }
+    public DataSetListView(DataSetList dataSetList)
+      : this() {
+      DataSetList = dataSetList;
+      dataSetList.Changed += new EventHandler(dataSetList_Changed);
+    }
+
+    void dataSetList_Changed(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((EventHandler)dataSetList_Changed, sender, e);
+      else UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      if(DataSetList == null) {
+        Caption = "Data Sets View";
+        dataSetsListView.Enabled = false;
+      } else {
+        dataSetsListView.Enabled = true;
+        dataSetsListView.Items.Clear();
+        foreach(DataSet dataSet in DataSetList) {
+          ListViewItem node = new ListViewItem();
+          node.Text = dataSet.Name;
+          node.Tag = dataSet;
+          dataSetsListView.Items.Add(node);
+        }
+      }
+    }
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      DataSet dataSet = new DataSet();
+      dataSet.Store = DataSetList.Store;
+      DataSetList.Add(dataSet);
+      UpdateControls();
+    }
+    private void dataSetsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(dataSetsListView.SelectedItems.Count > 0) {
+        if(detailsGroupBox.Controls.Count > 0)
+          detailsGroupBox.Controls[0].Dispose();
+        detailsGroupBox.Controls.Clear();
+        detailsGroupBox.Enabled = false;
+        IViewable viewable = (IViewable)dataSetsListView.SelectedItems[0].Tag;
+        Control control = (Control)viewable.CreateView();
+        detailsGroupBox.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+    #endregion
+
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      UpdateControls();
+    }
+  }
+}
+
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetListView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.Designer.cs	(revision 1529)
@@ -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
+
+namespace HeuristicLab.CEDMA.Core {
+  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.editorGroupBox = new System.Windows.Forms.GroupBox();
+      this.activateButton = new System.Windows.Forms.Button();
+      this.resultsButton = new System.Windows.Forms.Button();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.viewComboBox = new System.Windows.Forms.ComboBox();
+      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(381, 218);
+      this.editorGroupBox.TabIndex = 0;
+      this.editorGroupBox.TabStop = false;
+      this.editorGroupBox.Text = "&Editor:";
+      // 
+      // 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(0, 227);
+      this.activateButton.Name = "activateButton";
+      this.activateButton.Size = new System.Drawing.Size(75, 23);
+      this.activateButton.TabIndex = 2;
+      this.activateButton.Text = "&Activate";
+      this.activateButton.UseVisualStyleBackColor = true;
+      this.activateButton.Click += new System.EventHandler(this.activateButton_Click);
+      // 
+      // resultsButton
+      // 
+      this.resultsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resultsButton.Location = new System.Drawing.Point(130, 254);
+      this.resultsButton.Name = "resultsButton";
+      this.resultsButton.Size = new System.Drawing.Size(86, 23);
+      this.resultsButton.TabIndex = 3;
+      this.resultsButton.Text = "Show results";
+      this.resultsButton.UseVisualStyleBackColor = true;
+      this.resultsButton.Click += new System.EventHandler(this.resultsButton_Click);
+      // 
+      // progressBar
+      // 
+      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.progressBar.Location = new System.Drawing.Point(222, 254);
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(156, 23);
+      this.progressBar.TabIndex = 4;
+      // 
+      // viewComboBox
+      // 
+      this.viewComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.viewComboBox.FormattingEnabled = true;
+      this.viewComboBox.Location = new System.Drawing.Point(3, 256);
+      this.viewComboBox.Name = "viewComboBox";
+      this.viewComboBox.Size = new System.Drawing.Size(121, 21);
+      this.viewComboBox.TabIndex = 5;
+      // 
+      // DataSetView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.viewComboBox);
+      this.Controls.Add(this.progressBar);
+      this.Controls.Add(this.resultsButton);
+      this.Controls.Add(this.activateButton);
+      this.Controls.Add(this.editorGroupBox);
+      this.Name = "DataSetView";
+      this.Size = new System.Drawing.Size(381, 280);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox editorGroupBox;
+    private System.Windows.Forms.Button activateButton;
+    private System.Windows.Forms.Button resultsButton;
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.ComboBox viewComboBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.cs	(revision 1529)
@@ -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.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class DataSetView : ViewBase {
+    private DataSet dataSet;
+    public DataSet DataSet {
+      get { return dataSet; }
+      set { dataSet = value; }
+    }
+    private Results results;
+    public DataSetView() {
+      InitializeComponent();
+      Caption = "Data Set";
+    }
+    public DataSetView(DataSet dataSet)
+      : this() {
+      DataSet = dataSet;
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      editorGroupBox.Controls.Clear();
+      Control problemControl = (Control)DataSet.Problem.CreateView();
+      problemControl.Dock = DockStyle.Fill;
+      editorGroupBox.Controls.Add(problemControl);
+      PopulateViewComboBox();
+      resultsButton.Enabled = viewComboBox.SelectedItem != null;
+    }
+
+    private void PopulateViewComboBox() {
+      DiscoveryService service = new DiscoveryService();
+      IResultsViewFactory[] factories = service.GetInstances<IResultsViewFactory>();
+      viewComboBox.DataSource = factories;
+      viewComboBox.ValueMember = "Name";
+    }
+
+    private void activateButton_Click(object sender, EventArgs e) {
+      DataSet.Activate();
+      activateButton.Enabled = false;
+    }
+
+    private void resultsButton_Click(object sender, EventArgs e) {
+      if (results == null)
+        ReloadResults();
+      try {
+        IResultsViewFactory factory = (IResultsViewFactory)viewComboBox.SelectedItem;
+        BackgroundWorker worker = new BackgroundWorker();
+        worker.WorkerReportsProgress = true;
+        worker.WorkerSupportsCancellation = true;
+        worker.ProgressChanged += delegate(object progressChangedSender, ProgressChangedEventArgs progressChangedArgs) {
+          progressBar.Value = progressChangedArgs.ProgressPercentage;
+        };
+        worker.DoWork += delegate(object doWorkSender, DoWorkEventArgs doWorkArgs) {
+          int n = results.GetEntries().Count();
+          int i = 0;
+          // preload list 
+          foreach (var entry in results.GetEntries()) {
+            i++;
+            if((((i*100) / n) % 10) == 0) worker.ReportProgress((i * 100) / n);
+          }
+          worker.ReportProgress(100);
+        };
+        resultsButton.Enabled = false;
+        worker.RunWorkerAsync();
+        worker.RunWorkerCompleted += delegate(object completedSender, RunWorkerCompletedEventArgs compledArgs) {
+          resultsButton.Enabled = true;
+          progressBar.Value = 0;
+          IControl control = factory.CreateView(results);
+          PluginManager.ControlManager.ShowControl(control);
+        };
+      }
+      catch (Exception ex) {
+        string text = "Couldn't load selected view: " + viewComboBox.SelectedItem + "\n" + ex.Message;
+        MessageBox.Show(text, "Unable to create view", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    private void ReloadResults() {
+      results = dataSet.GetResults();
+    }
+  }
+}
+
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/DataSetView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/HeuristicLab.CEDMA.Core.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/HeuristicLab.CEDMA.Core.csproj	(revision 1529)
@@ -0,0 +1,191 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="StoreProxy.cs" />
+    <Compile Include="IResultsViewFactory.cs" />
+    <Compile Include="ResultsEntry.cs" />
+    <Compile Include="TableResultsView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TableResultsView.Designer.cs">
+      <DependentUpon>TableResultsView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Console.cs" />
+    <Compile Include="ConsoleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Problem.cs" />
+    <Compile Include="DataSet.cs" />
+    <Compile Include="DataSetList.cs" />
+    <Compile Include="DataSetListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DataSetListView.Designer.cs">
+      <DependentUpon>DataSetListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DataSetView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DataSetView.Designer.cs">
+      <DependentUpon>DataSetView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabCedmaCorePlugin.cs" />
+    <Compile Include="ProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProblemView.Designer.cs">
+      <DependentUpon>ProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Results.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.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.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="TableResultsView.resx">
+      <DependentUpon>TableResultsView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConsoleEditor.resx">
+      <DependentUpon>ConsoleEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DataSetListView.resx">
+      <DependentUpon>DataSetListView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DataSetView.resx">
+      <DependentUpon>DataSetView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProblemView.resx">
+      <DependentUpon>ProblemView.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: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/HeuristicLabCedmaCorePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/HeuristicLabCedmaCorePlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/HeuristicLabCedmaCorePlugin.cs	(revision 1529)
@@ -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.Core {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Core-3.3")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Core-3.3.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabCedmaCorePlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/IResultsViewFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/IResultsViewFactory.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/IResultsViewFactory.cs	(revision 1529)
@@ -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 HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IResultsViewFactory {
+    string Name { get; }
+    IControl CreateView(Results results);
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Problem.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Problem.cs	(revision 1529)
@@ -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;
+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 enum LearningTask {
+    Classification,
+    Regression,
+    TimeSeries,
+    Clustering
+  }
+
+  /// <summary>
+  /// Problem describes the data mining task.
+  /// Contains the actual data and meta-data:
+  ///  * which variables should be modelled 
+  ///  * regression, time-series or classification problem
+  /// </summary>
+  public class Problem : ItemBase {
+    private string name;
+    public string Name {
+      get { return name; }
+    }
+    private HeuristicLab.DataAnalysis.Dataset dataset;
+    public HeuristicLab.DataAnalysis.Dataset DataSet {
+      get { return dataset; }
+    }
+
+    private int trainingSamplesStart;
+    public int TrainingSamplesStart {
+      get { return trainingSamplesStart; }
+      set { trainingSamplesStart = value; }
+    }
+
+    private int trainingSamplesEnd;
+    public int TrainingSamplesEnd {
+      get { return trainingSamplesEnd; }
+      set { trainingSamplesEnd = value; }
+    }
+
+    private int validationSamplesStart;
+    public int ValidationSamplesStart {
+      get { return validationSamplesStart; }
+      set { validationSamplesStart = value; }
+    }
+
+    private int validationSamplesEnd;
+    public int ValidationSamplesEnd {
+      get { return validationSamplesEnd; }
+      set { validationSamplesEnd = value; }
+    }
+
+    private int testSamplesStart;
+    public int TestSamplesStart {
+      get { return testSamplesStart; }
+      set { testSamplesStart = value; }
+    }
+
+    private int testSamplesEnd;
+    public int TestSamplesEnd {
+      get { return testSamplesEnd; }
+      set { testSamplesEnd = value; }
+    }
+
+    private List<int> allowedInputVariables;
+    public List<int> AllowedInputVariables {
+      get { return allowedInputVariables; }
+    }
+
+    private List<int> allowedTargetVariables;
+    public List<int> AllowedTargetVariables {
+      get { return allowedTargetVariables; }
+    }
+
+    private bool autoRegressive;
+    public bool AutoRegressive {
+      get { return autoRegressive; }
+      set { autoRegressive = value; }
+    }
+
+    private int minTimeOffset;
+    public int MinTimeOffset {
+      get { return minTimeOffset; }
+      set { minTimeOffset = value; }
+    }
+
+    private int maxTimeOffset;
+    public int MaxTimeOffset {
+      get { return maxTimeOffset; }
+      set { maxTimeOffset = value; }
+    }
+
+    private LearningTask learningTask;
+    public LearningTask LearningTask {
+      get { return learningTask; }
+      set { learningTask = value; }
+    }
+
+    public Problem()
+      : base() {
+      dataset = new DataAnalysis.Dataset();
+      allowedInputVariables = new List<int>();
+      allowedTargetVariables = new List<int>();
+    }
+
+
+    public string GetVariableName(int index) {
+      return dataset.GetVariableName(index);
+    }
+
+    public override IView CreateView() {
+      return new ProblemView(this);
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("DataSet", dataset, document, persistedObjects));
+      XmlAttribute trainingSamplesStartAttr = document.CreateAttribute("TrainingSamplesStart");
+      trainingSamplesStartAttr.Value = TrainingSamplesStart.ToString();
+      XmlAttribute trainingSamplesEndAttr = document.CreateAttribute("TrainingSamplesEnd");
+      trainingSamplesEndAttr.Value = TrainingSamplesEnd.ToString();
+      XmlAttribute validationSamplesStartAttr = document.CreateAttribute("ValidationSamplesStart");
+      validationSamplesStartAttr.Value = ValidationSamplesStart.ToString();
+      XmlAttribute validationSamplesEndAttr = document.CreateAttribute("ValidationSamplesEnd");
+      validationSamplesEndAttr.Value = ValidationSamplesEnd.ToString();
+      XmlAttribute testSamplesStartAttr = document.CreateAttribute("TestSamplesStart");
+      testSamplesStartAttr.Value = TestSamplesStart.ToString();
+      XmlAttribute testSamplesEndAttr = document.CreateAttribute("TestSamplesEnd");
+      testSamplesEndAttr.Value = TestSamplesEnd.ToString();
+      XmlAttribute learningTaskAttr = document.CreateAttribute("LearningTask");
+      learningTaskAttr.Value = LearningTask.ToString();
+      XmlAttribute autoRegressiveAttr = document.CreateAttribute("AutoRegressive");
+      autoRegressiveAttr.Value = AutoRegressive.ToString();
+      XmlAttribute minTimeOffsetAttr = document.CreateAttribute("MinTimeOffset");
+      minTimeOffsetAttr.Value = MinTimeOffset.ToString();
+      XmlAttribute maxTimeOffsetAttr = document.CreateAttribute("MaxTimeOffset");
+      maxTimeOffsetAttr.Value = MaxTimeOffset.ToString();
+
+      node.Attributes.Append(trainingSamplesStartAttr);
+      node.Attributes.Append(trainingSamplesEndAttr);
+      node.Attributes.Append(validationSamplesStartAttr);
+      node.Attributes.Append(validationSamplesEndAttr);
+      node.Attributes.Append(testSamplesStartAttr);
+      node.Attributes.Append(testSamplesEndAttr);
+      node.Attributes.Append(learningTaskAttr);
+      node.Attributes.Append(autoRegressiveAttr);
+      node.Attributes.Append(minTimeOffsetAttr);
+      node.Attributes.Append(maxTimeOffsetAttr);
+
+      XmlElement targetVariablesElement = document.CreateElement("AllowedTargetVariables");
+      targetVariablesElement.InnerText = SemiColonSeparatedList(AllowedTargetVariables);
+      XmlElement inputVariablesElement = document.CreateElement("AllowedInputVariables");
+      inputVariablesElement.InnerText = SemiColonSeparatedList(AllowedInputVariables);
+      node.AppendChild(targetVariablesElement);
+      node.AppendChild(inputVariablesElement);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      dataset = (HeuristicLab.DataAnalysis.Dataset)PersistenceManager.Restore(node.SelectSingleNode("DataSet"), restoredObjects);
+      TrainingSamplesStart = int.Parse(node.Attributes["TrainingSamplesStart"].Value);
+      TrainingSamplesEnd = int.Parse(node.Attributes["TrainingSamplesEnd"].Value);
+      ValidationSamplesStart = int.Parse(node.Attributes["ValidationSamplesStart"].Value);
+      ValidationSamplesEnd = int.Parse(node.Attributes["ValidationSamplesEnd"].Value);
+      TestSamplesStart = int.Parse(node.Attributes["TestSamplesStart"].Value);
+      TestSamplesEnd = int.Parse(node.Attributes["TestSamplesEnd"].Value);
+      LearningTask = (LearningTask)Enum.Parse(typeof(LearningTask), node.Attributes["LearningTask"].Value);
+      AutoRegressive = bool.Parse(node.Attributes["AutoRegressive"].Value);
+      if (node.Attributes["MinTimeOffset"] != null)
+        MinTimeOffset = XmlConvert.ToInt32(node.Attributes["MinTimeOffset"].Value);
+      else MinTimeOffset = 0;
+      if (node.Attributes["MaxTimeOffset"] != null)
+        MaxTimeOffset = XmlConvert.ToInt32(node.Attributes["MaxTimeOffset"].Value);
+      else MaxTimeOffset = 0;
+
+      allowedTargetVariables.Clear();
+      foreach (string tok in node.SelectSingleNode("AllowedTargetVariables").InnerText.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
+        allowedTargetVariables.Add(int.Parse(tok));
+      allowedInputVariables.Clear();
+      foreach (string tok in node.SelectSingleNode("AllowedInputVariables").InnerText.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
+        allowedInputVariables.Add(int.Parse(tok));
+    }
+
+    private string SemiColonSeparatedList(List<int> xs) {
+      StringBuilder b = new StringBuilder();
+      foreach (int x in xs) {
+        b = b.Append(x).Append(";");
+      }
+      if (xs.Count > 0) b.Remove(b.Length - 1, 1); // remove last ';'
+      return b.ToString();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.Designer.cs	(revision 1529)
@@ -0,0 +1,423 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 ProblemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (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.importButton = new System.Windows.Forms.Button();
+      this.trainingSamplesStartTextBox = new System.Windows.Forms.TextBox();
+      this.trainingLabel = new System.Windows.Forms.Label();
+      this.trainingSamplesEndTextBox = new System.Windows.Forms.TextBox();
+      this.validationSamplesEndTextBox = new System.Windows.Forms.TextBox();
+      this.validationSamplesStartTextBox = new System.Windows.Forms.TextBox();
+      this.validationLabel = new System.Windows.Forms.Label();
+      this.testSamplesEndTextBox = new System.Windows.Forms.TextBox();
+      this.testSamplesStartTextBox = new System.Windows.Forms.TextBox();
+      this.testLabel = new System.Windows.Forms.Label();
+      this.targetsListBox = new System.Windows.Forms.CheckedListBox();
+      this.inputsListBox = new System.Windows.Forms.CheckedListBox();
+      this.autoregressiveCheckBox = new System.Windows.Forms.CheckBox();
+      this.targetsGroupBox = new System.Windows.Forms.GroupBox();
+      this.inputsGroupBox = new System.Windows.Forms.GroupBox();
+      this.partitioningGroupBox = new System.Windows.Forms.GroupBox();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.classificationRadioButton = new System.Windows.Forms.RadioButton();
+      this.regressionRadioButton = new System.Windows.Forms.RadioButton();
+      this.timeSeriesRadioButton = new System.Windows.Forms.RadioButton();
+      this.minTimeOffsetLabel = new System.Windows.Forms.Label();
+      this.minTimeOffsetTextBox = new System.Windows.Forms.TextBox();
+      this.learningTaskGroupBox = new System.Windows.Forms.GroupBox();
+      this.autoregressiveLabel = new System.Windows.Forms.Label();
+      this.maxTimeOffsetLabel = new System.Windows.Forms.Label();
+      this.maxTimeOffsetTextBox = new System.Windows.Forms.TextBox();
+      this.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
+      this.targetsGroupBox.SuspendLayout();
+      this.inputsGroupBox.SuspendLayout();
+      this.partitioningGroupBox.SuspendLayout();
+      this.learningTaskGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // importButton
+      // 
+      this.importButton.Location = new System.Drawing.Point(3, 3);
+      this.importButton.Name = "importButton";
+      this.importButton.Size = new System.Drawing.Size(75, 23);
+      this.importButton.TabIndex = 0;
+      this.importButton.Text = "Import";
+      this.importButton.UseVisualStyleBackColor = true;
+      this.importButton.Click += new System.EventHandler(this.importButton_Click);
+      // 
+      // trainingSamplesStartTextBox
+      // 
+      this.trainingSamplesStartTextBox.Location = new System.Drawing.Point(119, 17);
+      this.trainingSamplesStartTextBox.Name = "trainingSamplesStartTextBox";
+      this.trainingSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
+      this.trainingSamplesStartTextBox.TabIndex = 4;
+      this.trainingSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.trainingSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // trainingLabel
+      // 
+      this.trainingLabel.AutoSize = true;
+      this.trainingLabel.Location = new System.Drawing.Point(13, 20);
+      this.trainingLabel.Name = "trainingLabel";
+      this.trainingLabel.Size = new System.Drawing.Size(89, 13);
+      this.trainingLabel.TabIndex = 3;
+      this.trainingLabel.Text = "Training samples:";
+      // 
+      // trainingSamplesEndTextBox
+      // 
+      this.trainingSamplesEndTextBox.Location = new System.Drawing.Point(221, 17);
+      this.trainingSamplesEndTextBox.Name = "trainingSamplesEndTextBox";
+      this.trainingSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
+      this.trainingSamplesEndTextBox.TabIndex = 10;
+      this.trainingSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.trainingSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // validationSamplesEndTextBox
+      // 
+      this.validationSamplesEndTextBox.Location = new System.Drawing.Point(221, 43);
+      this.validationSamplesEndTextBox.Name = "validationSamplesEndTextBox";
+      this.validationSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
+      this.validationSamplesEndTextBox.TabIndex = 13;
+      this.validationSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.validationSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // validationSamplesStartTextBox
+      // 
+      this.validationSamplesStartTextBox.Location = new System.Drawing.Point(119, 43);
+      this.validationSamplesStartTextBox.Name = "validationSamplesStartTextBox";
+      this.validationSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
+      this.validationSamplesStartTextBox.TabIndex = 12;
+      this.validationSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.validationSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // validationLabel
+      // 
+      this.validationLabel.AutoSize = true;
+      this.validationLabel.Location = new System.Drawing.Point(5, 46);
+      this.validationLabel.Name = "validationLabel";
+      this.validationLabel.Size = new System.Drawing.Size(97, 13);
+      this.validationLabel.TabIndex = 11;
+      this.validationLabel.Text = "Validation samples:";
+      // 
+      // testSamplesEndTextBox
+      // 
+      this.testSamplesEndTextBox.Location = new System.Drawing.Point(221, 68);
+      this.testSamplesEndTextBox.Name = "testSamplesEndTextBox";
+      this.testSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
+      this.testSamplesEndTextBox.TabIndex = 16;
+      this.testSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.testSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // testSamplesStartTextBox
+      // 
+      this.testSamplesStartTextBox.Location = new System.Drawing.Point(119, 68);
+      this.testSamplesStartTextBox.Name = "testSamplesStartTextBox";
+      this.testSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
+      this.testSamplesStartTextBox.TabIndex = 15;
+      this.testSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.testSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // testLabel
+      // 
+      this.testLabel.AutoSize = true;
+      this.testLabel.Location = new System.Drawing.Point(30, 71);
+      this.testLabel.Name = "testLabel";
+      this.testLabel.Size = new System.Drawing.Size(72, 13);
+      this.testLabel.TabIndex = 14;
+      this.testLabel.Text = "Test samples:";
+      // 
+      // targetsListBox
+      // 
+      this.targetsListBox.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.targetsListBox.FormattingEnabled = true;
+      this.targetsListBox.Location = new System.Drawing.Point(8, 15);
+      this.targetsListBox.Name = "targetsListBox";
+      this.targetsListBox.Size = new System.Drawing.Size(153, 79);
+      this.targetsListBox.TabIndex = 19;
+      this.targetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.targetsListBox_ItemCheck);
+      // 
+      // inputsListBox
+      // 
+      this.inputsListBox.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.inputsListBox.FormattingEnabled = true;
+      this.inputsListBox.Location = new System.Drawing.Point(6, 15);
+      this.inputsListBox.Name = "inputsListBox";
+      this.inputsListBox.Size = new System.Drawing.Size(141, 79);
+      this.inputsListBox.TabIndex = 21;
+      this.inputsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.inputsListBox_ItemCheck);
+      // 
+      // autoregressiveCheckBox
+      // 
+      this.autoregressiveCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.autoregressiveCheckBox.AutoSize = true;
+      this.autoregressiveCheckBox.Enabled = false;
+      this.autoregressiveCheckBox.Location = new System.Drawing.Point(131, 83);
+      this.autoregressiveCheckBox.Name = "autoregressiveCheckBox";
+      this.autoregressiveCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.autoregressiveCheckBox.TabIndex = 22;
+      this.autoregressiveCheckBox.UseVisualStyleBackColor = true;
+      this.autoregressiveCheckBox.CheckedChanged += new System.EventHandler(this.autoregressiveCheckBox_CheckedChanged);
+      // 
+      // targetsGroupBox
+      // 
+      this.targetsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.targetsGroupBox.Controls.Add(this.targetsListBox);
+      this.targetsGroupBox.Location = new System.Drawing.Point(29, 515);
+      this.targetsGroupBox.Name = "targetsGroupBox";
+      this.targetsGroupBox.Size = new System.Drawing.Size(167, 100);
+      this.targetsGroupBox.TabIndex = 23;
+      this.targetsGroupBox.TabStop = false;
+      this.targetsGroupBox.Text = "Target variables";
+      // 
+      // inputsGroupBox
+      // 
+      this.inputsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.inputsGroupBox.Controls.Add(this.inputsListBox);
+      this.inputsGroupBox.Location = new System.Drawing.Point(202, 515);
+      this.inputsGroupBox.Name = "inputsGroupBox";
+      this.inputsGroupBox.Size = new System.Drawing.Size(153, 100);
+      this.inputsGroupBox.TabIndex = 24;
+      this.inputsGroupBox.TabStop = false;
+      this.inputsGroupBox.Text = "Input variables:";
+      // 
+      // partitioningGroupBox
+      // 
+      this.partitioningGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.partitioningGroupBox.Controls.Add(this.validationSamplesEndTextBox);
+      this.partitioningGroupBox.Controls.Add(this.trainingLabel);
+      this.partitioningGroupBox.Controls.Add(this.trainingSamplesStartTextBox);
+      this.partitioningGroupBox.Controls.Add(this.trainingSamplesEndTextBox);
+      this.partitioningGroupBox.Controls.Add(this.validationLabel);
+      this.partitioningGroupBox.Controls.Add(this.testSamplesEndTextBox);
+      this.partitioningGroupBox.Controls.Add(this.validationSamplesStartTextBox);
+      this.partitioningGroupBox.Controls.Add(this.testSamplesStartTextBox);
+      this.partitioningGroupBox.Controls.Add(this.testLabel);
+      this.partitioningGroupBox.Location = new System.Drawing.Point(29, 409);
+      this.partitioningGroupBox.Name = "partitioningGroupBox";
+      this.partitioningGroupBox.Size = new System.Drawing.Size(326, 100);
+      this.partitioningGroupBox.TabIndex = 25;
+      this.partitioningGroupBox.TabStop = false;
+      this.partitioningGroupBox.Text = "Data set partitions:";
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "txt";
+      this.openFileDialog.FileName = "txt";
+      this.openFileDialog.Filter = "Text files|*.txt|All files|*.*";
+      this.openFileDialog.Title = "Import data set from file";
+      // 
+      // classificationRadioButton
+      // 
+      this.classificationRadioButton.AutoSize = true;
+      this.classificationRadioButton.Checked = true;
+      this.classificationRadioButton.Location = new System.Drawing.Point(6, 16);
+      this.classificationRadioButton.Name = "classificationRadioButton";
+      this.classificationRadioButton.Size = new System.Drawing.Size(86, 17);
+      this.classificationRadioButton.TabIndex = 28;
+      this.classificationRadioButton.TabStop = true;
+      this.classificationRadioButton.Text = "Classification";
+      this.classificationRadioButton.UseVisualStyleBackColor = true;
+      this.classificationRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
+      // 
+      // regressionRadioButton
+      // 
+      this.regressionRadioButton.AutoSize = true;
+      this.regressionRadioButton.Location = new System.Drawing.Point(6, 39);
+      this.regressionRadioButton.Name = "regressionRadioButton";
+      this.regressionRadioButton.Size = new System.Drawing.Size(78, 17);
+      this.regressionRadioButton.TabIndex = 29;
+      this.regressionRadioButton.Text = "Regression";
+      this.regressionRadioButton.UseVisualStyleBackColor = true;
+      this.regressionRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
+      // 
+      // timeSeriesRadioButton
+      // 
+      this.timeSeriesRadioButton.AutoSize = true;
+      this.timeSeriesRadioButton.Location = new System.Drawing.Point(6, 62);
+      this.timeSeriesRadioButton.Name = "timeSeriesRadioButton";
+      this.timeSeriesRadioButton.Size = new System.Drawing.Size(119, 17);
+      this.timeSeriesRadioButton.TabIndex = 30;
+      this.timeSeriesRadioButton.Text = "Time series forecast";
+      this.timeSeriesRadioButton.UseVisualStyleBackColor = true;
+      this.timeSeriesRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
+      // 
+      // minTimeOffsetLabel
+      // 
+      this.minTimeOffsetLabel.AutoSize = true;
+      this.minTimeOffsetLabel.Enabled = false;
+      this.minTimeOffsetLabel.Location = new System.Drawing.Point(38, 106);
+      this.minTimeOffsetLabel.Name = "minTimeOffsetLabel";
+      this.minTimeOffsetLabel.Size = new System.Drawing.Size(87, 13);
+      this.minTimeOffsetLabel.TabIndex = 31;
+      this.minTimeOffsetLabel.Text = "Min. Time Offset:";
+      // 
+      // minTimeOffsetTextBox
+      // 
+      this.minTimeOffsetTextBox.Enabled = false;
+      this.minTimeOffsetTextBox.Location = new System.Drawing.Point(131, 103);
+      this.minTimeOffsetTextBox.Name = "minTimeOffsetTextBox";
+      this.minTimeOffsetTextBox.Size = new System.Drawing.Size(96, 20);
+      this.minTimeOffsetTextBox.TabIndex = 32;
+      this.minTimeOffsetTextBox.Validated += new System.EventHandler(this.timeOffsetTextBox_Validated);
+      this.minTimeOffsetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeOffsetTextBox_Validating);
+      // 
+      // learningTaskGroupBox
+      // 
+      this.learningTaskGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.learningTaskGroupBox.Controls.Add(this.autoregressiveLabel);
+      this.learningTaskGroupBox.Controls.Add(this.classificationRadioButton);
+      this.learningTaskGroupBox.Controls.Add(this.minTimeOffsetLabel);
+      this.learningTaskGroupBox.Controls.Add(this.minTimeOffsetTextBox);
+      this.learningTaskGroupBox.Controls.Add(this.maxTimeOffsetLabel);
+      this.learningTaskGroupBox.Controls.Add(this.regressionRadioButton);
+      this.learningTaskGroupBox.Controls.Add(this.maxTimeOffsetTextBox);
+      this.learningTaskGroupBox.Controls.Add(this.timeSeriesRadioButton);
+      this.learningTaskGroupBox.Controls.Add(this.autoregressiveCheckBox);
+      this.learningTaskGroupBox.Location = new System.Drawing.Point(29, 621);
+      this.learningTaskGroupBox.Name = "learningTaskGroupBox";
+      this.learningTaskGroupBox.Size = new System.Drawing.Size(326, 163);
+      this.learningTaskGroupBox.TabIndex = 35;
+      this.learningTaskGroupBox.TabStop = false;
+      this.learningTaskGroupBox.Text = "Learning task";
+      // 
+      // autoregressiveLabel
+      // 
+      this.autoregressiveLabel.AutoSize = true;
+      this.autoregressiveLabel.Enabled = false;
+      this.autoregressiveLabel.Location = new System.Drawing.Point(45, 83);
+      this.autoregressiveLabel.Name = "autoregressiveLabel";
+      this.autoregressiveLabel.Size = new System.Drawing.Size(80, 13);
+      this.autoregressiveLabel.TabIndex = 35;
+      this.autoregressiveLabel.Text = "Autoregressive:";
+      // 
+      // maxTimeOffsetLabel
+      // 
+      this.maxTimeOffsetLabel.AutoSize = true;
+      this.maxTimeOffsetLabel.Enabled = false;
+      this.maxTimeOffsetLabel.Location = new System.Drawing.Point(35, 132);
+      this.maxTimeOffsetLabel.Name = "maxTimeOffsetLabel";
+      this.maxTimeOffsetLabel.Size = new System.Drawing.Size(90, 13);
+      this.maxTimeOffsetLabel.TabIndex = 33;
+      this.maxTimeOffsetLabel.Text = "Max. Time Offset:";
+      // 
+      // maxTimeOffsetTextBox
+      // 
+      this.maxTimeOffsetTextBox.Enabled = false;
+      this.maxTimeOffsetTextBox.Location = new System.Drawing.Point(131, 129);
+      this.maxTimeOffsetTextBox.Name = "maxTimeOffsetTextBox";
+      this.maxTimeOffsetTextBox.Size = new System.Drawing.Size(96, 20);
+      this.maxTimeOffsetTextBox.TabIndex = 34;
+      this.maxTimeOffsetTextBox.Validated += new System.EventHandler(this.timeOffsetTextBox_Validated);
+      this.maxTimeOffsetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeOffsetTextBox_Validating);
+      // 
+      // 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(3, 32);
+      this.datasetView.Name = "datasetView";
+      this.datasetView.Size = new System.Drawing.Size(395, 371);
+      this.datasetView.TabIndex = 17;
+      // 
+      // ProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.learningTaskGroupBox);
+      this.Controls.Add(this.partitioningGroupBox);
+      this.Controls.Add(this.inputsGroupBox);
+      this.Controls.Add(this.targetsGroupBox);
+      this.Controls.Add(this.datasetView);
+      this.Controls.Add(this.importButton);
+      this.Name = "ProblemView";
+      this.Size = new System.Drawing.Size(406, 787);
+      this.targetsGroupBox.ResumeLayout(false);
+      this.inputsGroupBox.ResumeLayout(false);
+      this.partitioningGroupBox.ResumeLayout(false);
+      this.partitioningGroupBox.PerformLayout();
+      this.learningTaskGroupBox.ResumeLayout(false);
+      this.learningTaskGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button importButton;
+    private System.Windows.Forms.TextBox trainingSamplesStartTextBox;
+    private System.Windows.Forms.Label trainingLabel;
+    private System.Windows.Forms.TextBox trainingSamplesEndTextBox;
+    private System.Windows.Forms.TextBox validationSamplesEndTextBox;
+    private System.Windows.Forms.TextBox validationSamplesStartTextBox;
+    private System.Windows.Forms.Label validationLabel;
+    private System.Windows.Forms.TextBox testSamplesEndTextBox;
+    private System.Windows.Forms.TextBox testSamplesStartTextBox;
+    private System.Windows.Forms.Label testLabel;
+    private HeuristicLab.DataAnalysis.DatasetView datasetView;
+    private System.Windows.Forms.CheckedListBox targetsListBox;
+    private System.Windows.Forms.CheckedListBox inputsListBox;
+    private System.Windows.Forms.CheckBox autoregressiveCheckBox;
+    private System.Windows.Forms.GroupBox targetsGroupBox;
+    private System.Windows.Forms.GroupBox inputsGroupBox;
+    private System.Windows.Forms.GroupBox partitioningGroupBox;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.RadioButton classificationRadioButton;
+    private System.Windows.Forms.RadioButton regressionRadioButton;
+    private System.Windows.Forms.RadioButton timeSeriesRadioButton;
+    private System.Windows.Forms.Label minTimeOffsetLabel;
+    private System.Windows.Forms.TextBox minTimeOffsetTextBox;
+    private System.Windows.Forms.GroupBox learningTaskGroupBox;
+    private System.Windows.Forms.Label maxTimeOffsetLabel;
+    private System.Windows.Forms.TextBox maxTimeOffsetTextBox;
+    private System.Windows.Forms.Label autoregressiveLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.cs	(revision 1529)
@@ -0,0 +1,244 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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.DataAnalysis;
+using System.Diagnostics;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class ProblemView : ViewBase {
+    private Problem problem;
+
+    public ProblemView(Problem problem) {
+      this.problem = problem;
+      InitializeComponent();
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      datasetView.Dataset = problem.DataSet;
+      trainingSamplesStartTextBox.Text = problem.TrainingSamplesStart.ToString();
+      trainingSamplesEndTextBox.Text = problem.TrainingSamplesEnd.ToString();
+      validationSamplesStartTextBox.Text = problem.ValidationSamplesStart.ToString();
+      validationSamplesEndTextBox.Text = problem.ValidationSamplesEnd.ToString();
+      testSamplesStartTextBox.Text = problem.TestSamplesStart.ToString();
+      testSamplesEndTextBox.Text = problem.TestSamplesEnd.ToString();
+      minTimeOffsetTextBox.Text = problem.MinTimeOffset.ToString();
+      maxTimeOffsetTextBox.Text = problem.MaxTimeOffset.ToString();
+      autoregressiveCheckBox.Checked = problem.AutoRegressive;
+      switch (problem.LearningTask) {
+        case LearningTask.Classification: classificationRadioButton.Checked = true; break;
+        case LearningTask.Regression: regressionRadioButton.Checked = true; break;
+        case LearningTask.TimeSeries: timeSeriesRadioButton.Checked = true; break;
+      }
+      targetsListBox.Items.Clear();
+      inputsListBox.Items.Clear();
+      for (int i = 0; i < problem.DataSet.Columns; i++) {
+        targetsListBox.Items.Add(problem.DataSet.GetVariableName(i), problem.AllowedTargetVariables.Contains(i));
+        inputsListBox.Items.Add(problem.DataSet.GetVariableName(i), problem.AllowedInputVariables.Contains(i));
+      }
+    }
+
+    private void importButton_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)problem.DataSet;
+          dataset.Rows = parser.Rows;
+          dataset.Columns = parser.Columns;
+          for (int i = 0; i < parser.VariableNames.Length; i++) {
+            dataset.SetVariableName(i, parser.VariableNames[i]);
+          }
+          dataset.Name = parser.ProblemName;
+          dataset.Samples = new double[dataset.Rows * dataset.Columns];
+          Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
+          datasetView.Dataset = problem.DataSet;
+
+          problem.TrainingSamplesStart = parser.TrainingSamplesStart;
+          problem.ValidationSamplesEnd = parser.TrainingSamplesStart;
+          problem.TrainingSamplesEnd = parser.TrainingSamplesEnd;
+          problem.ValidationSamplesStart = parser.ValidationSamplesStart;
+          problem.ValidationSamplesEnd = parser.ValidationSamplesEnd;
+          problem.TestSamplesStart = parser.TestSamplesStart;
+          problem.TestSamplesEnd = parser.TestSamplesEnd;
+          problem.AllowedTargetVariables.Add(parser.TargetVariable);
+
+          List<int> nonInputVariables = parser.NonInputVariables;
+          for (int i = 0; i < dataset.Columns; i++) {
+            if (!nonInputVariables.Contains(i)) problem.AllowedInputVariables.Add(i);
+          }
+          Refresh();
+        }
+      }
+
+    }
+
+    private void targetsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
+      if (e.NewValue == CheckState.Checked && !problem.AllowedTargetVariables.Contains(e.Index))
+        problem.AllowedTargetVariables.Add(e.Index);
+      else if (e.NewValue == CheckState.Unchecked && problem.AllowedTargetVariables.Contains(e.Index))
+        problem.AllowedTargetVariables.Remove(e.Index);
+    }
+
+    private void inputsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
+      if (e.NewValue == CheckState.Checked && !problem.AllowedInputVariables.Contains(e.Index))
+        problem.AllowedInputVariables.Add(e.Index);
+      else if (e.NewValue == CheckState.Unchecked && problem.AllowedInputVariables.Contains(e.Index))
+        problem.AllowedInputVariables.Remove(e.Index);
+    }
+
+    private void autoregressiveCheckBox_CheckedChanged(object sender, EventArgs e) {
+      problem.AutoRegressive = autoregressiveCheckBox.Checked;
+    }
+
+    private void samplesTextBox_Validating(object sender, CancelEventArgs e) {
+      try {
+        int trainingStart = int.Parse(trainingSamplesStartTextBox.Text);
+        int trainingEnd = int.Parse(trainingSamplesEndTextBox.Text);
+        int validationStart = int.Parse(validationSamplesStartTextBox.Text);
+        int validationEnd = int.Parse(validationSamplesEndTextBox.Text);
+        int testStart = int.Parse(testSamplesStartTextBox.Text);
+        int testEnd = int.Parse(testSamplesEndTextBox.Text);
+        if (trainingStart < 0 || validationStart < 0 || testStart < 0 ||
+          trainingEnd >= problem.DataSet.Rows || validationEnd >= problem.DataSet.Rows || testEnd >= problem.DataSet.Rows ||
+          trainingStart >= trainingEnd ||
+          validationStart >= validationEnd ||
+          testStart >= testEnd ||
+          IsOverlapping(trainingStart, trainingEnd, validationStart, validationEnd) ||
+          IsOverlapping(trainingStart, trainingEnd, testStart, testEnd) ||
+          IsOverlapping(validationStart, validationEnd, testStart, testEnd))
+          ColorSamplesTextBoxes(Color.Red);
+        else
+          ColorSamplesTextBoxes(Color.White);
+      }
+      catch (FormatException ex) {
+        ColorSamplesTextBoxes(Color.Red);
+      }
+    }
+
+    private void samplesTextBox_Validated(object sender, EventArgs e) {
+      problem.TrainingSamplesStart = int.Parse(trainingSamplesStartTextBox.Text);
+      problem.TrainingSamplesEnd = int.Parse(trainingSamplesEndTextBox.Text);
+      problem.ValidationSamplesStart = int.Parse(validationSamplesStartTextBox.Text);
+      problem.ValidationSamplesEnd = int.Parse(validationSamplesEndTextBox.Text);
+      problem.TestSamplesStart = int.Parse(testSamplesStartTextBox.Text);
+      problem.TestSamplesEnd = int.Parse(testSamplesEndTextBox.Text);
+    }
+
+    private void ColorSamplesTextBoxes(Color color) {
+      trainingSamplesStartTextBox.BackColor = color;
+      trainingSamplesEndTextBox.BackColor = color;
+      validationSamplesStartTextBox.BackColor = color;
+      validationSamplesEndTextBox.BackColor = color;
+      testSamplesStartTextBox.BackColor = color;
+      testSamplesEndTextBox.BackColor = color;
+    }
+
+    private bool IsOverlapping(int x0, int y0, int x1, int y1) {
+      Trace.Assert(x0 <= y0 && x1 <= y1);
+      int tmp;
+      // make sure that x0,y0 is the left interval
+      if (x1 < x0) {
+        tmp = x1;
+        x1 = x0;
+        x0 = tmp;
+        tmp = y1;
+        y1 = y0;
+        y0 = tmp;
+      }
+      return y0 > x1;
+    }
+    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();
+    }
+
+    #region gui events
+    private void radioButton_CheckedChanged(object sender, EventArgs e) {
+      minTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
+      minTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
+      maxTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
+      maxTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
+      autoregressiveCheckBox.Enabled = timeSeriesRadioButton.Checked;
+      autoregressiveLabel.Enabled = timeSeriesRadioButton.Checked;
+      if (timeSeriesRadioButton.Checked) problem.LearningTask = LearningTask.TimeSeries;
+      else if (classificationRadioButton.Checked) problem.LearningTask = LearningTask.Classification;
+      else if (regressionRadioButton.Checked) problem.LearningTask = LearningTask.Regression;
+    }
+
+    private void timeOffsetTextBox_Validating(object sender, CancelEventArgs e) {
+      int min, max;
+      e.Cancel = !int.TryParse(minTimeOffsetTextBox.Text, out min);
+      e.Cancel = !int.TryParse(maxTimeOffsetTextBox.Text, out max);
+      e.Cancel = min > max;
+    }
+    private void timeOffsetTextBox_Validated(object sender, EventArgs e) {
+      problem.MinTimeOffset = int.Parse(minTimeOffsetTextBox.Text);
+      problem.MaxTimeOffset = int.Parse(maxTimeOffsetTextBox.Text);
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ProblemView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Results.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Results.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/Results.cs	(revision 1529)
@@ -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.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.Data;
+using HeuristicLab.DataAnalysis;
+using System.Drawing;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Results : ItemBase {
+    private const int PAGE_SIZE = 1000;
+    private string[] categoricalVariables = null;
+    public string[] CategoricalVariables {
+      get {
+        if (categoricalVariables == null) {
+          LoadModelAttributes();
+        }
+        return categoricalVariables;
+      }
+    }
+
+    private string[] ordinalVariables = null;
+    public string[] OrdinalVariables {
+      get {
+        if (ordinalVariables == null) {
+          LoadModelAttributes();
+        }
+        return ordinalVariables;
+      }
+    }
+
+    private IStore store;
+    public IStore Store {
+      get { return store; }
+      set {
+        store = value;
+      }
+    }
+
+    private Dictionary<string, Dictionary<object, double>> categoricalValueIndices = new Dictionary<string, Dictionary<object, double>>();
+
+    private Entity dataSetEntity;
+
+    public Results(IStore store) {
+      this.store = store;
+    }
+
+    internal void FilterDataSet(Entity entity) {
+      this.dataSetEntity = entity;
+    }
+
+    private List<ResultsEntry> entries = null;
+    private bool cached = false;
+    public IEnumerable<ResultsEntry> GetEntries() {
+      if (!cached)
+        return SelectRows();
+      return entries.AsEnumerable();
+    }
+
+    private IEnumerable<ResultsEntry> SelectRows() {
+      int page = 0;
+      int resultsReturned = 0;
+      bool newEntry = false;
+      if (store == null) yield break;
+      entries = new List<ResultsEntry>();
+      do {
+        var allBindings = store.Query("<" + dataSetEntity + "> <" + Ontology.PredicateHasModel + "> ?Model ." + Environment.NewLine +
+          "?Model ?Attribute ?Value .", page, PAGE_SIZE);
+        var allModelBindings = allBindings.GroupBy(x => (Entity)x.Get("Model"));
+        resultsReturned = allBindings.Count;
+
+        foreach (var modelBindings in allModelBindings) {
+          ResultsEntry entry = entries.FirstOrDefault(x => x.Uri == modelBindings.Key.Uri);
+          newEntry = false;
+          if (entry == null) {
+            entry = new ResultsEntry();
+            entry.Uri = modelBindings.Key.Uri;
+            entries.Add(entry);
+            newEntry = true;
+          }
+          foreach (var binding in modelBindings) {
+            if (binding.Get("Value") is Literal) {
+              string name = ((Entity)binding.Get("Attribute")).Uri.Replace(Ontology.CedmaNameSpace, "");
+              if (entry.Get(name) == null) {
+                object value = ((Literal)binding.Get("Value")).Value;
+                entry.Set(name, value);
+              }
+            }
+          }
+          if (newEntry) yield return entry;
+        }
+        page++;
+      } while (resultsReturned == PAGE_SIZE);
+
+      FireChanged();
+      cached = true;
+    }
+
+    internal IEnumerable<string> SelectModelAttributes() {
+      return CategoricalVariables.Concat(OrdinalVariables);
+    }
+
+    private void LoadModelAttributes() {
+      this.ordinalVariables =
+        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeOrdinalAttribute + "> .", 0, 100)
+        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
+        .ToArray();
+      this.categoricalVariables =
+        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeCategoricalAttribute + "> .", 0, 100)
+        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
+        .ToArray();
+    }
+
+    public double IndexOfCategoricalValue(string variable, object value) {
+      if (value == null) return double.NaN;
+      Dictionary<object, double> valueToIndexMap;
+      if (categoricalValueIndices.ContainsKey(variable)) {
+        valueToIndexMap = categoricalValueIndices[variable];
+      } else {
+        valueToIndexMap = new Dictionary<object, double>();
+        categoricalValueIndices[variable] = valueToIndexMap;
+      }
+      if (!valueToIndexMap.ContainsKey(value)) {
+        if (valueToIndexMap.Values.Count == 0) valueToIndexMap[value] = 1.0;
+        else valueToIndexMap[value] = 1.0 + valueToIndexMap.Values.Max();
+      }
+      return valueToIndexMap[value];
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ResultsEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ResultsEntry.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/ResultsEntry.cs	(revision 1529)
@@ -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.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class ResultsEntry {
+    private Dictionary<string, object> values = new Dictionary<string, object>();
+
+    private bool selected = false;
+    public bool Selected {
+      get { return selected; }
+      set { selected = value; }
+    }
+
+    private string uri;
+    public string Uri {
+      get { return uri; }
+      set { uri = value; }
+    }
+
+    public void Set(string name, object value) {
+      values.Add(name, value);
+    }
+
+    public object Get(string name) {
+      if (name == null || !values.ContainsKey(name)) return null;
+      return values[name];
+    }
+
+    public void ToggleSelected() {
+      selected = !selected;
+    }
+
+    public string GetToolTipText() {
+      StringBuilder b = new StringBuilder();
+      foreach (KeyValuePair<string, object> v in values) {
+        string val = v.Value.ToString();
+        if (val.Length > 40) val = val.Substring(0, 38) + "...";
+        b.Append(v.Key).Append(" = ").Append(val).AppendLine();
+      }
+      return b.ToString();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/StoreProxy.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/StoreProxy.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/StoreProxy.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel.Channels;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class StoreProxy : IStore {
+    private string serverUri;
+    private IStore store;
+    private NetTcpBinding binding;
+
+    public StoreProxy(string serverUri) {
+      this.serverUri = serverUri;
+      Reset();
+      Reconnect();
+    }
+
+    private void Reset() {
+      binding = new NetTcpBinding();
+      binding.ReceiveTimeout = new TimeSpan(1, 0, 0);
+      binding.MaxReceivedMessageSize = int.MaxValue;
+      binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
+      binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
+    }
+
+    private void Reconnect() {
+      ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding);
+      store = factory.CreateChannel(new EndpointAddress(serverUri));
+    }
+
+    private void ExecuteSavely(Action a) {
+      ExecuteSavely(a);
+    }
+
+    private T ExecuteSavely<T>(Func<T> a ) {
+      try {
+        return a();
+      }
+      catch (CommunicationException) {
+        Reconnect();
+        return a();
+      }
+      catch (TimeoutException) {
+        Reconnect();
+        return a();
+      }
+    }
+
+    #region IStore Members
+
+    public void Add(Statement statement) {
+      ExecuteSavely(() => store.Add(statement));
+    }
+
+    public ICollection<VariableBindings> Query(ICollection<Statement> query, int page, int pageSize) {
+      return ExecuteSavely(() => store.Query(query, page, pageSize));
+    }
+
+    public ICollection<VariableBindings> Query(string query, int page, int pageSize) {
+      return ExecuteSavely(() => store.Query(query, page, pageSize));
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.Designer.cs	(revision 1529)
@@ -0,0 +1,61 @@
+﻿namespace HeuristicLab.CEDMA.Core {
+  partial class TableResultsView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = false;
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataGridView.Location = new System.Drawing.Point(0, 0);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.ReadOnly = true;
+      this.dataGridView.Size = new System.Drawing.Size(450, 459);
+      this.dataGridView.TabIndex = 0;
+      this.dataGridView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridView_MouseDoubleClick);
+      this.dataGridView.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);
+      // 
+      // TableResultsView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataGridView);
+      this.Name = "TableResultsView";
+      this.Size = new System.Drawing.Size(450, 459);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.cs	(revision 1529)
@@ -0,0 +1,90 @@
+﻿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.CEDMA.Core;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+
+  public partial class TableResultsView : ViewBase {
+    private Results Results {
+      get { return (Results)Item; }
+      set { Item = value; }
+    }
+    private bool suppressEvents;
+    public TableResultsView(Results results) {
+      suppressEvents = false;
+      InitializeComponent();
+      Results = results;
+      results.Changed += new EventHandler(results_Changed);
+    }
+
+    void results_Changed(object sender, EventArgs e) {
+      if (suppressEvents) return;
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      suppressEvents = true;
+      dataGridView.Rows.Clear();
+      dataGridView.Columns.Clear();
+      List<string> attributeNames = Results.SelectModelAttributes().ToList();
+      foreach (var attribute in attributeNames) {
+        dataGridView.Columns.Add(attribute, attribute);
+      }
+
+      var entries = Results.GetEntries();
+      foreach (var entry in entries) {
+        int rowIndex = dataGridView.Rows.Add();
+        dataGridView.Rows[rowIndex].Tag = entry;
+        foreach (string attrName in attributeNames) {
+          dataGridView.Rows[rowIndex].Cells[attrName].Value = entry.Get(attrName);
+        }
+        if (entry.Selected) dataGridView.Rows[rowIndex].Selected = true;
+      }
+      dataGridView.Update();
+      suppressEvents = false;
+    }
+
+    private void dataGridView_SelectionChanged(object sender, EventArgs e) {
+      if (suppressEvents) return;
+      foreach (DataGridViewRow row in dataGridView.Rows) {
+        ((ResultsEntry)row.Tag).Selected = row.Selected;
+      }
+      suppressEvents = true;
+      Results.FireChanged();
+      suppressEvents = false;
+    }
+
+    private void dataGridView_MouseDoubleClick(object sender, MouseEventArgs e) {
+      if (e.Button == MouseButtons.Left && e.Clicks == 2) {
+        DataGridView.HitTestInfo hitInfo = dataGridView.HitTest(e.X, e.Y);
+        ResultsEntry entry = (ResultsEntry)dataGridView.Rows[hitInfo.RowIndex].Tag;
+        string serializedData =  (string)entry.Get(Ontology.PredicateSerializedData.Uri.Replace(Ontology.CedmaNameSpace, ""));
+        var model = (IItem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(serializedData));
+        PluginManager.ControlManager.ShowControl(model.CreateView());
+      }
+    }
+  }
+
+  public class TablesResultsViewFactory : IResultsViewFactory {
+    #region IResultsViewFactory Members
+
+    public string Name {
+      get { return "Table"; }
+    }
+
+    public IControl CreateView(Results results) {
+      return new TableResultsView(results);
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/3.3/TableResultsView.resx	(revision 1529)
@@ -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: unk/sources/HeuristicLab.CEDMA.Core/Console.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/Console.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class Console : ItemBase, IEditable {
-    private string serverUri;
-    public string ServerUri {
-      get { return serverUri; }
-    }
-
-    private DataSetList dataSetList;
-    public DataSetList DataSetList {
-      get { return dataSetList; }
-    }
-
-    public Console()
-      : base() {
-      dataSetList = new DataSetList();
-    }
-
-    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
-
-    internal void Connect(string serverUri) {
-      DataSetList.Store = new StoreProxy(serverUri);
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,121 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 Panel serverPanel;
-    private Console console;
-
-    public ConsoleEditor(Console console) {
-      InitializeComponent();
-      this.console = console;
-      serverPanel.Enabled = false;
-    }
-
-    #region autogenerated code
-    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.serverPanel = new System.Windows.Forms.Panel();
-      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);
-      // 
-      // serverPanel
-      // 
-      this.serverPanel.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.serverPanel.Location = new System.Drawing.Point(3, 29);
-      this.serverPanel.Name = "serverPanel";
-      this.serverPanel.Size = new System.Drawing.Size(439, 157);
-      this.serverPanel.TabIndex = 4;
-      // 
-      // ConsoleEditor
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.Controls.Add(this.serverPanel);
-      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();
-
-    }
-
-    #endregion
-
-    private void connectButton_Click(object sender, EventArgs e) {
-      try {
-        console.Connect(uriTextBox.Text);
-        connectButton.Enabled = false;
-        serverPanel.Enabled = true;
-        serverPanel.Controls.Clear();
-        Control dataSetListView = (Control)console.DataSetList.CreateView();
-        dataSetListView.Dock = DockStyle.Fill;
-        serverPanel.Controls.Add(dataSetListView);
-      } catch(CommunicationException ex) {
-        MessageBox.Show("Exception while trying to connect to " + uriTextBox.Text + "\n" + ex.Message);
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Core/DataSet.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSet.cs	(revision 1528)
+++ 	(revision )
@@ -1,93 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 DataSet : IViewable {
-    public IStore Store { get; set; }
-
-    private Guid guid;
-    public Guid Guid {
-      get { return guid; }
-    }
-
-    private string name;
-    public string Name {
-      get { return name; }
-      set { name = value; }
-    }
-
-    private Problem problem;
-    public Problem Problem {
-      get {
-        // lazy loading of problem from DB
-        if (problem == null) {
-          var persistedData = Store.Query(
-            "<" + Ontology.CedmaNameSpace + Guid + "> <" + Ontology.PredicateSerializedData.Uri + "> ?SerializedData .", 0, 10);
-          if (persistedData.Count() == 1) {
-            Literal persistedLiteral = (Literal)persistedData.First().Get("SerializedData");
-            this.problem = (Problem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String((string)persistedLiteral.Value));
-          } else
-            this.problem = new Problem(); // no entry in the DB => create a new problem
-        }
-        return problem;
-      }
-    }
-
-    public DataSet()
-      : base() {
-      guid = Guid.NewGuid();
-      name = "Data set";
-    }
-
-    public DataSet(IStore store, Entity dataSetEntity)
-      : this() {
-      Store = store;
-      guid = new Guid(dataSetEntity.Uri.Remove(0, Ontology.CedmaNameSpace.Length));
-      name = guid.ToString();
-    }
-
-    public void Activate() {
-      Entity myEntity = new Entity(Ontology.CedmaNameSpace + Guid);
-      Store.Add(new Statement(myEntity, Ontology.PredicateInstanceOf, Ontology.TypeDataSet));
-      Store.Add(new Statement(myEntity, Ontology.PredicateSerializedData, new Literal(Convert.ToBase64String(PersistenceManager.SaveToGZip(problem)))));
-      Store.Add(new Statement(myEntity, Ontology.PredicateName, new Literal(name)));
-    }
-
-    public IView CreateView() {
-      return new DataSetView(this);
-    }
-
-    internal Results GetResults() {
-      Results results = new Results(Store);
-      results.FilterDataSet(new Entity(Ontology.CedmaNameSpace + Guid));
-      return results;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/DataSetList.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetList.cs	(revision 1528)
+++ 	(revision )
@@ -1,91 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 DataSetList : ItemBase, IEnumerable<DataSet> {
-    private List<DataSet> dataSetList;
-    private IStore store;
-    public IStore Store {
-      get { return store; }
-      set {
-        store = value;
-        Action reload = ReloadList;
-        lock (dataSetList) {
-          dataSetList.Clear();
-        }
-        reload.BeginInvoke(null, null);
-      }
-    }
-
-    public DataSetList()
-      : base() {
-      dataSetList = new List<DataSet>();
-    }
-
-    public override IView CreateView() {
-      return new DataSetListView(this);
-    }
-
-    private void ReloadList() {
-      HeuristicLab.CEDMA.DB.Interfaces.Variable dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
-      HeuristicLab.CEDMA.DB.Interfaces.Variable dataSetNameVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("Name");
-      var bindings = store.Query(
-        "?DataSet <"+Ontology.PredicateInstanceOf.Uri+"> <"+Ontology.TypeDataSet.Uri+"> ." + Environment.NewLine +
-        "?DataSet <"+Ontology.PredicateName.Uri+"> ?Name .",0, 100);
-      foreach (var binding in bindings) {
-        DataSet d = new DataSet(store, (Entity)binding.Get("DataSet"));
-        d.Name = (string)((Literal)binding.Get("Name")).Value;
-        lock (dataSetList) {
-          dataSetList.Add(d);
-        }
-        FireChanged();
-      }
-    }
-
-    public IEnumerator<DataSet> GetEnumerator() {
-      List<DataSet> dataSets = new List<DataSet>();
-      lock (dataSets) {
-        dataSets.AddRange(dataSetList);
-      }
-      return dataSets.GetEnumerator();
-    }
-
-    IEnumerator IEnumerable.GetEnumerator() {
-      return GetEnumerator();
-    }
-
-    public void Add(DataSet dataSet) {
-      dataSetList.Add(dataSet);
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/DataSetListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,162 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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 DataSetListView {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any 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.refreshButton = new System.Windows.Forms.Button();
-      this.addButton = new System.Windows.Forms.Button();
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.dataSetsGroupBox = new System.Windows.Forms.GroupBox();
-      this.dataSetsListView = new System.Windows.Forms.ListView();
-      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.dataSetsGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // 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);
-      // 
-      // 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);
-      // 
-      // 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.dataSetsGroupBox);
-      // 
-      // 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;
-      // 
-      // dataSetsGroupBox
-      // 
-      this.dataSetsGroupBox.Controls.Add(this.dataSetsListView);
-      this.dataSetsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.dataSetsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.dataSetsGroupBox.Name = "dataSetsGroupBox";
-      this.dataSetsGroupBox.Size = new System.Drawing.Size(135, 155);
-      this.dataSetsGroupBox.TabIndex = 0;
-      this.dataSetsGroupBox.TabStop = false;
-      this.dataSetsGroupBox.Text = "&Data Sets";
-      // 
-      // dataSetsListView
-      // 
-      this.dataSetsListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.dataSetsListView.Location = new System.Drawing.Point(3, 16);
-      this.dataSetsListView.MultiSelect = false;
-      this.dataSetsListView.Name = "dataSetsListView";
-      this.dataSetsListView.Size = new System.Drawing.Size(129, 136);
-      this.dataSetsListView.TabIndex = 0;
-      this.dataSetsListView.UseCompatibleStateImageBehavior = false;
-      this.dataSetsListView.View = System.Windows.Forms.View.List;
-      this.dataSetsListView.SelectedIndexChanged += new System.EventHandler(this.dataSetsListView_SelectedIndexChanged);
-      // 
-      // 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";
-      // 
-      // DataSetListView
-      // 
-      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 = "DataSetListView";
-      this.Size = new System.Drawing.Size(276, 184);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      this.splitContainer1.ResumeLayout(false);
-      this.dataSetsGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.GroupBox dataSetsGroupBox;
-    private System.Windows.Forms.GroupBox detailsGroupBox;
-    private System.Windows.Forms.Button addButton;
-    private Button refreshButton;
-    private ListView dataSetsListView;
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/DataSetListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.cs	(revision 1528)
+++ 	(revision )
@@ -1,100 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 DataSetListView : ViewBase {
-    public DataSetList DataSetList {
-      get { return (DataSetList)Item; }
-      set { base.Item = value; }
-    }
-
-    public DataSetListView() {
-      InitializeComponent();
-      Caption = "DataSet View";
-    }
-    public DataSetListView(DataSetList dataSetList)
-      : this() {
-      DataSetList = dataSetList;
-      dataSetList.Changed += new EventHandler(dataSetList_Changed);
-    }
-
-    void dataSetList_Changed(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((EventHandler)dataSetList_Changed, sender, e);
-      else UpdateControls();
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      detailsGroupBox.Controls.Clear();
-      detailsGroupBox.Enabled = false;
-      if(DataSetList == null) {
-        Caption = "Data Sets View";
-        dataSetsListView.Enabled = false;
-      } else {
-        dataSetsListView.Enabled = true;
-        dataSetsListView.Items.Clear();
-        foreach(DataSet dataSet in DataSetList) {
-          ListViewItem node = new ListViewItem();
-          node.Text = dataSet.Name;
-          node.Tag = dataSet;
-          dataSetsListView.Items.Add(node);
-        }
-      }
-    }
-
-    #region Button Events
-    private void addButton_Click(object sender, EventArgs e) {
-      DataSet dataSet = new DataSet();
-      dataSet.Store = DataSetList.Store;
-      DataSetList.Add(dataSet);
-      UpdateControls();
-    }
-    private void dataSetsListView_SelectedIndexChanged(object sender, EventArgs e) {
-      if(dataSetsListView.SelectedItems.Count > 0) {
-        if(detailsGroupBox.Controls.Count > 0)
-          detailsGroupBox.Controls[0].Dispose();
-        detailsGroupBox.Controls.Clear();
-        detailsGroupBox.Enabled = false;
-        IViewable viewable = (IViewable)dataSetsListView.SelectedItems[0].Tag;
-        Control control = (Control)viewable.CreateView();
-        detailsGroupBox.Controls.Add(control);
-        control.Dock = DockStyle.Fill;
-        detailsGroupBox.Enabled = true;
-      }
-    }
-    #endregion
-
-
-    private void refreshButton_Click(object sender, EventArgs e) {
-      UpdateControls();
-    }
-  }
-}
-
Index: unk/sources/HeuristicLab.CEDMA.Core/DataSetListView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,129 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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 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.editorGroupBox = new System.Windows.Forms.GroupBox();
-      this.activateButton = new System.Windows.Forms.Button();
-      this.resultsButton = new System.Windows.Forms.Button();
-      this.progressBar = new System.Windows.Forms.ProgressBar();
-      this.viewComboBox = new System.Windows.Forms.ComboBox();
-      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(381, 218);
-      this.editorGroupBox.TabIndex = 0;
-      this.editorGroupBox.TabStop = false;
-      this.editorGroupBox.Text = "&Editor:";
-      // 
-      // 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(0, 227);
-      this.activateButton.Name = "activateButton";
-      this.activateButton.Size = new System.Drawing.Size(75, 23);
-      this.activateButton.TabIndex = 2;
-      this.activateButton.Text = "&Activate";
-      this.activateButton.UseVisualStyleBackColor = true;
-      this.activateButton.Click += new System.EventHandler(this.activateButton_Click);
-      // 
-      // resultsButton
-      // 
-      this.resultsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.resultsButton.Location = new System.Drawing.Point(130, 254);
-      this.resultsButton.Name = "resultsButton";
-      this.resultsButton.Size = new System.Drawing.Size(86, 23);
-      this.resultsButton.TabIndex = 3;
-      this.resultsButton.Text = "Show results";
-      this.resultsButton.UseVisualStyleBackColor = true;
-      this.resultsButton.Click += new System.EventHandler(this.resultsButton_Click);
-      // 
-      // progressBar
-      // 
-      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.progressBar.Location = new System.Drawing.Point(222, 254);
-      this.progressBar.Name = "progressBar";
-      this.progressBar.Size = new System.Drawing.Size(156, 23);
-      this.progressBar.TabIndex = 4;
-      // 
-      // viewComboBox
-      // 
-      this.viewComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.viewComboBox.FormattingEnabled = true;
-      this.viewComboBox.Location = new System.Drawing.Point(3, 256);
-      this.viewComboBox.Name = "viewComboBox";
-      this.viewComboBox.Size = new System.Drawing.Size(121, 21);
-      this.viewComboBox.TabIndex = 5;
-      // 
-      // DataSetView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.viewComboBox);
-      this.Controls.Add(this.progressBar);
-      this.Controls.Add(this.resultsButton);
-      this.Controls.Add(this.activateButton);
-      this.Controls.Add(this.editorGroupBox);
-      this.Name = "DataSetView";
-      this.Size = new System.Drawing.Size(381, 280);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.GroupBox editorGroupBox;
-    private System.Windows.Forms.Button activateButton;
-    private System.Windows.Forms.Button resultsButton;
-    private System.Windows.Forms.ProgressBar progressBar;
-    private System.Windows.Forms.ComboBox viewComboBox;
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/DataSetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.cs	(revision 1528)
+++ 	(revision )
@@ -1,115 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.CEDMA.DB.Interfaces;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.CEDMA.Core {
-  public partial class DataSetView : ViewBase {
-    private DataSet dataSet;
-    public DataSet DataSet {
-      get { return dataSet; }
-      set { dataSet = value; }
-    }
-    private Results results;
-    public DataSetView() {
-      InitializeComponent();
-      Caption = "Data Set";
-    }
-    public DataSetView(DataSet dataSet)
-      : this() {
-      DataSet = dataSet;
-      UpdateControls();
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      editorGroupBox.Controls.Clear();
-      Control problemControl = (Control)DataSet.Problem.CreateView();
-      problemControl.Dock = DockStyle.Fill;
-      editorGroupBox.Controls.Add(problemControl);
-      PopulateViewComboBox();
-      resultsButton.Enabled = viewComboBox.SelectedItem != null;
-    }
-
-    private void PopulateViewComboBox() {
-      DiscoveryService service = new DiscoveryService();
-      IResultsViewFactory[] factories = service.GetInstances<IResultsViewFactory>();
-      viewComboBox.DataSource = factories;
-      viewComboBox.ValueMember = "Name";
-    }
-
-    private void activateButton_Click(object sender, EventArgs e) {
-      DataSet.Activate();
-      activateButton.Enabled = false;
-    }
-
-    private void resultsButton_Click(object sender, EventArgs e) {
-      if (results == null)
-        ReloadResults();
-      try {
-        IResultsViewFactory factory = (IResultsViewFactory)viewComboBox.SelectedItem;
-        BackgroundWorker worker = new BackgroundWorker();
-        worker.WorkerReportsProgress = true;
-        worker.WorkerSupportsCancellation = true;
-        worker.ProgressChanged += delegate(object progressChangedSender, ProgressChangedEventArgs progressChangedArgs) {
-          progressBar.Value = progressChangedArgs.ProgressPercentage;
-        };
-        worker.DoWork += delegate(object doWorkSender, DoWorkEventArgs doWorkArgs) {
-          int n = results.GetEntries().Count();
-          int i = 0;
-          // preload list 
-          foreach (var entry in results.GetEntries()) {
-            i++;
-            if((((i*100) / n) % 10) == 0) worker.ReportProgress((i * 100) / n);
-          }
-          worker.ReportProgress(100);
-        };
-        resultsButton.Enabled = false;
-        worker.RunWorkerAsync();
-        worker.RunWorkerCompleted += delegate(object completedSender, RunWorkerCompletedEventArgs compledArgs) {
-          resultsButton.Enabled = true;
-          progressBar.Value = 0;
-          IControl control = factory.CreateView(results);
-          PluginManager.ControlManager.ShowControl(control);
-        };
-      }
-      catch (Exception ex) {
-        string text = "Couldn't load selected view: " + viewComboBox.SelectedItem + "\n" + ex.Message;
-        MessageBox.Show(text, "Unable to create view", MessageBoxButtons.OK, MessageBoxIcon.Error);
-      }
-    }
-
-    private void ReloadResults() {
-      results = dataSet.GetResults();
-    }
-  }
-}
-
Index: unk/sources/HeuristicLab.CEDMA.Core/DataSetView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1528)
+++ 	(revision )
@@ -1,191 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="StoreProxy.cs" />
-    <Compile Include="IResultsViewFactory.cs" />
-    <Compile Include="ResultsEntry.cs" />
-    <Compile Include="TableResultsView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="TableResultsView.Designer.cs">
-      <DependentUpon>TableResultsView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Console.cs" />
-    <Compile Include="ConsoleEditor.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Problem.cs" />
-    <Compile Include="DataSet.cs" />
-    <Compile Include="DataSetList.cs" />
-    <Compile Include="DataSetListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="DataSetListView.Designer.cs">
-      <DependentUpon>DataSetListView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="DataSetView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="DataSetView.Designer.cs">
-      <DependentUpon>DataSetView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="HeuristicLabCedmaCorePlugin.cs" />
-    <Compile Include="ProblemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ProblemView.Designer.cs">
-      <DependentUpon>ProblemView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Results.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.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.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="TableResultsView.resx">
-      <DependentUpon>TableResultsView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ConsoleEditor.resx">
-      <DependentUpon>ConsoleEditor.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="DataSetListView.resx">
-      <DependentUpon>DataSetListView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="DataSetView.resx">
-      <DependentUpon>DataSetView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ProblemView.resx">
-      <DependentUpon>ProblemView.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: unk/sources/HeuristicLab.CEDMA.Core/HeuristicLabCedmaCorePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLabCedmaCorePlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.CEDMA.Core-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
-  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
-  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
-  public class HeuristicLabCedmaCorePlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/IResultsViewFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/IResultsViewFactory.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using System.Windows.Forms;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.CEDMA.Core {
-  public interface IResultsViewFactory {
-    string Name { get; }
-    IControl CreateView(Results results);
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/Problem.cs	(revision 1528)
+++ 	(revision )
@@ -1,221 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 enum LearningTask {
-    Classification,
-    Regression,
-    TimeSeries,
-    Clustering
-  }
-
-  /// <summary>
-  /// Problem describes the data mining task.
-  /// Contains the actual data and meta-data:
-  ///  * which variables should be modelled 
-  ///  * regression, time-series or classification problem
-  /// </summary>
-  public class Problem : ItemBase {
-    private string name;
-    public string Name {
-      get { return name; }
-    }
-    private HeuristicLab.DataAnalysis.Dataset dataset;
-    public HeuristicLab.DataAnalysis.Dataset DataSet {
-      get { return dataset; }
-    }
-
-    private int trainingSamplesStart;
-    public int TrainingSamplesStart {
-      get { return trainingSamplesStart; }
-      set { trainingSamplesStart = value; }
-    }
-
-    private int trainingSamplesEnd;
-    public int TrainingSamplesEnd {
-      get { return trainingSamplesEnd; }
-      set { trainingSamplesEnd = value; }
-    }
-
-    private int validationSamplesStart;
-    public int ValidationSamplesStart {
-      get { return validationSamplesStart; }
-      set { validationSamplesStart = value; }
-    }
-
-    private int validationSamplesEnd;
-    public int ValidationSamplesEnd {
-      get { return validationSamplesEnd; }
-      set { validationSamplesEnd = value; }
-    }
-
-    private int testSamplesStart;
-    public int TestSamplesStart {
-      get { return testSamplesStart; }
-      set { testSamplesStart = value; }
-    }
-
-    private int testSamplesEnd;
-    public int TestSamplesEnd {
-      get { return testSamplesEnd; }
-      set { testSamplesEnd = value; }
-    }
-
-    private List<int> allowedInputVariables;
-    public List<int> AllowedInputVariables {
-      get { return allowedInputVariables; }
-    }
-
-    private List<int> allowedTargetVariables;
-    public List<int> AllowedTargetVariables {
-      get { return allowedTargetVariables; }
-    }
-
-    private bool autoRegressive;
-    public bool AutoRegressive {
-      get { return autoRegressive; }
-      set { autoRegressive = value; }
-    }
-
-    private int minTimeOffset;
-    public int MinTimeOffset {
-      get { return minTimeOffset; }
-      set { minTimeOffset = value; }
-    }
-
-    private int maxTimeOffset;
-    public int MaxTimeOffset {
-      get { return maxTimeOffset; }
-      set { maxTimeOffset = value; }
-    }
-
-    private LearningTask learningTask;
-    public LearningTask LearningTask {
-      get { return learningTask; }
-      set { learningTask = value; }
-    }
-
-    public Problem()
-      : base() {
-      dataset = new DataAnalysis.Dataset();
-      allowedInputVariables = new List<int>();
-      allowedTargetVariables = new List<int>();
-    }
-
-
-    public string GetVariableName(int index) {
-      return dataset.GetVariableName(index);
-    }
-
-    public override IView CreateView() {
-      return new ProblemView(this);
-    }
-
-    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-      node.AppendChild(PersistenceManager.Persist("DataSet", dataset, document, persistedObjects));
-      XmlAttribute trainingSamplesStartAttr = document.CreateAttribute("TrainingSamplesStart");
-      trainingSamplesStartAttr.Value = TrainingSamplesStart.ToString();
-      XmlAttribute trainingSamplesEndAttr = document.CreateAttribute("TrainingSamplesEnd");
-      trainingSamplesEndAttr.Value = TrainingSamplesEnd.ToString();
-      XmlAttribute validationSamplesStartAttr = document.CreateAttribute("ValidationSamplesStart");
-      validationSamplesStartAttr.Value = ValidationSamplesStart.ToString();
-      XmlAttribute validationSamplesEndAttr = document.CreateAttribute("ValidationSamplesEnd");
-      validationSamplesEndAttr.Value = ValidationSamplesEnd.ToString();
-      XmlAttribute testSamplesStartAttr = document.CreateAttribute("TestSamplesStart");
-      testSamplesStartAttr.Value = TestSamplesStart.ToString();
-      XmlAttribute testSamplesEndAttr = document.CreateAttribute("TestSamplesEnd");
-      testSamplesEndAttr.Value = TestSamplesEnd.ToString();
-      XmlAttribute learningTaskAttr = document.CreateAttribute("LearningTask");
-      learningTaskAttr.Value = LearningTask.ToString();
-      XmlAttribute autoRegressiveAttr = document.CreateAttribute("AutoRegressive");
-      autoRegressiveAttr.Value = AutoRegressive.ToString();
-      XmlAttribute minTimeOffsetAttr = document.CreateAttribute("MinTimeOffset");
-      minTimeOffsetAttr.Value = MinTimeOffset.ToString();
-      XmlAttribute maxTimeOffsetAttr = document.CreateAttribute("MaxTimeOffset");
-      maxTimeOffsetAttr.Value = MaxTimeOffset.ToString();
-
-      node.Attributes.Append(trainingSamplesStartAttr);
-      node.Attributes.Append(trainingSamplesEndAttr);
-      node.Attributes.Append(validationSamplesStartAttr);
-      node.Attributes.Append(validationSamplesEndAttr);
-      node.Attributes.Append(testSamplesStartAttr);
-      node.Attributes.Append(testSamplesEndAttr);
-      node.Attributes.Append(learningTaskAttr);
-      node.Attributes.Append(autoRegressiveAttr);
-      node.Attributes.Append(minTimeOffsetAttr);
-      node.Attributes.Append(maxTimeOffsetAttr);
-
-      XmlElement targetVariablesElement = document.CreateElement("AllowedTargetVariables");
-      targetVariablesElement.InnerText = SemiColonSeparatedList(AllowedTargetVariables);
-      XmlElement inputVariablesElement = document.CreateElement("AllowedInputVariables");
-      inputVariablesElement.InnerText = SemiColonSeparatedList(AllowedInputVariables);
-      node.AppendChild(targetVariablesElement);
-      node.AppendChild(inputVariablesElement);
-      return node;
-    }
-
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      dataset = (HeuristicLab.DataAnalysis.Dataset)PersistenceManager.Restore(node.SelectSingleNode("DataSet"), restoredObjects);
-      TrainingSamplesStart = int.Parse(node.Attributes["TrainingSamplesStart"].Value);
-      TrainingSamplesEnd = int.Parse(node.Attributes["TrainingSamplesEnd"].Value);
-      ValidationSamplesStart = int.Parse(node.Attributes["ValidationSamplesStart"].Value);
-      ValidationSamplesEnd = int.Parse(node.Attributes["ValidationSamplesEnd"].Value);
-      TestSamplesStart = int.Parse(node.Attributes["TestSamplesStart"].Value);
-      TestSamplesEnd = int.Parse(node.Attributes["TestSamplesEnd"].Value);
-      LearningTask = (LearningTask)Enum.Parse(typeof(LearningTask), node.Attributes["LearningTask"].Value);
-      AutoRegressive = bool.Parse(node.Attributes["AutoRegressive"].Value);
-      if (node.Attributes["MinTimeOffset"] != null)
-        MinTimeOffset = XmlConvert.ToInt32(node.Attributes["MinTimeOffset"].Value);
-      else MinTimeOffset = 0;
-      if (node.Attributes["MaxTimeOffset"] != null)
-        MaxTimeOffset = XmlConvert.ToInt32(node.Attributes["MaxTimeOffset"].Value);
-      else MaxTimeOffset = 0;
-
-      allowedTargetVariables.Clear();
-      foreach (string tok in node.SelectSingleNode("AllowedTargetVariables").InnerText.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
-        allowedTargetVariables.Add(int.Parse(tok));
-      allowedInputVariables.Clear();
-      foreach (string tok in node.SelectSingleNode("AllowedInputVariables").InnerText.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
-        allowedInputVariables.Add(int.Parse(tok));
-    }
-
-    private string SemiColonSeparatedList(List<int> xs) {
-      StringBuilder b = new StringBuilder();
-      foreach (int x in xs) {
-        b = b.Append(x).Append(";");
-      }
-      if (xs.Count > 0) b.Remove(b.Length - 1, 1); // remove last ';'
-      return b.ToString();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/ProblemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,423 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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 ProblemView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if(disposing && (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.importButton = new System.Windows.Forms.Button();
-      this.trainingSamplesStartTextBox = new System.Windows.Forms.TextBox();
-      this.trainingLabel = new System.Windows.Forms.Label();
-      this.trainingSamplesEndTextBox = new System.Windows.Forms.TextBox();
-      this.validationSamplesEndTextBox = new System.Windows.Forms.TextBox();
-      this.validationSamplesStartTextBox = new System.Windows.Forms.TextBox();
-      this.validationLabel = new System.Windows.Forms.Label();
-      this.testSamplesEndTextBox = new System.Windows.Forms.TextBox();
-      this.testSamplesStartTextBox = new System.Windows.Forms.TextBox();
-      this.testLabel = new System.Windows.Forms.Label();
-      this.targetsListBox = new System.Windows.Forms.CheckedListBox();
-      this.inputsListBox = new System.Windows.Forms.CheckedListBox();
-      this.autoregressiveCheckBox = new System.Windows.Forms.CheckBox();
-      this.targetsGroupBox = new System.Windows.Forms.GroupBox();
-      this.inputsGroupBox = new System.Windows.Forms.GroupBox();
-      this.partitioningGroupBox = new System.Windows.Forms.GroupBox();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.classificationRadioButton = new System.Windows.Forms.RadioButton();
-      this.regressionRadioButton = new System.Windows.Forms.RadioButton();
-      this.timeSeriesRadioButton = new System.Windows.Forms.RadioButton();
-      this.minTimeOffsetLabel = new System.Windows.Forms.Label();
-      this.minTimeOffsetTextBox = new System.Windows.Forms.TextBox();
-      this.learningTaskGroupBox = new System.Windows.Forms.GroupBox();
-      this.autoregressiveLabel = new System.Windows.Forms.Label();
-      this.maxTimeOffsetLabel = new System.Windows.Forms.Label();
-      this.maxTimeOffsetTextBox = new System.Windows.Forms.TextBox();
-      this.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
-      this.targetsGroupBox.SuspendLayout();
-      this.inputsGroupBox.SuspendLayout();
-      this.partitioningGroupBox.SuspendLayout();
-      this.learningTaskGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // importButton
-      // 
-      this.importButton.Location = new System.Drawing.Point(3, 3);
-      this.importButton.Name = "importButton";
-      this.importButton.Size = new System.Drawing.Size(75, 23);
-      this.importButton.TabIndex = 0;
-      this.importButton.Text = "Import";
-      this.importButton.UseVisualStyleBackColor = true;
-      this.importButton.Click += new System.EventHandler(this.importButton_Click);
-      // 
-      // trainingSamplesStartTextBox
-      // 
-      this.trainingSamplesStartTextBox.Location = new System.Drawing.Point(119, 17);
-      this.trainingSamplesStartTextBox.Name = "trainingSamplesStartTextBox";
-      this.trainingSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
-      this.trainingSamplesStartTextBox.TabIndex = 4;
-      this.trainingSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
-      this.trainingSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
-      // 
-      // trainingLabel
-      // 
-      this.trainingLabel.AutoSize = true;
-      this.trainingLabel.Location = new System.Drawing.Point(13, 20);
-      this.trainingLabel.Name = "trainingLabel";
-      this.trainingLabel.Size = new System.Drawing.Size(89, 13);
-      this.trainingLabel.TabIndex = 3;
-      this.trainingLabel.Text = "Training samples:";
-      // 
-      // trainingSamplesEndTextBox
-      // 
-      this.trainingSamplesEndTextBox.Location = new System.Drawing.Point(221, 17);
-      this.trainingSamplesEndTextBox.Name = "trainingSamplesEndTextBox";
-      this.trainingSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
-      this.trainingSamplesEndTextBox.TabIndex = 10;
-      this.trainingSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
-      this.trainingSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
-      // 
-      // validationSamplesEndTextBox
-      // 
-      this.validationSamplesEndTextBox.Location = new System.Drawing.Point(221, 43);
-      this.validationSamplesEndTextBox.Name = "validationSamplesEndTextBox";
-      this.validationSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
-      this.validationSamplesEndTextBox.TabIndex = 13;
-      this.validationSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
-      this.validationSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
-      // 
-      // validationSamplesStartTextBox
-      // 
-      this.validationSamplesStartTextBox.Location = new System.Drawing.Point(119, 43);
-      this.validationSamplesStartTextBox.Name = "validationSamplesStartTextBox";
-      this.validationSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
-      this.validationSamplesStartTextBox.TabIndex = 12;
-      this.validationSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
-      this.validationSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
-      // 
-      // validationLabel
-      // 
-      this.validationLabel.AutoSize = true;
-      this.validationLabel.Location = new System.Drawing.Point(5, 46);
-      this.validationLabel.Name = "validationLabel";
-      this.validationLabel.Size = new System.Drawing.Size(97, 13);
-      this.validationLabel.TabIndex = 11;
-      this.validationLabel.Text = "Validation samples:";
-      // 
-      // testSamplesEndTextBox
-      // 
-      this.testSamplesEndTextBox.Location = new System.Drawing.Point(221, 68);
-      this.testSamplesEndTextBox.Name = "testSamplesEndTextBox";
-      this.testSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
-      this.testSamplesEndTextBox.TabIndex = 16;
-      this.testSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
-      this.testSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
-      // 
-      // testSamplesStartTextBox
-      // 
-      this.testSamplesStartTextBox.Location = new System.Drawing.Point(119, 68);
-      this.testSamplesStartTextBox.Name = "testSamplesStartTextBox";
-      this.testSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
-      this.testSamplesStartTextBox.TabIndex = 15;
-      this.testSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
-      this.testSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
-      // 
-      // testLabel
-      // 
-      this.testLabel.AutoSize = true;
-      this.testLabel.Location = new System.Drawing.Point(30, 71);
-      this.testLabel.Name = "testLabel";
-      this.testLabel.Size = new System.Drawing.Size(72, 13);
-      this.testLabel.TabIndex = 14;
-      this.testLabel.Text = "Test samples:";
-      // 
-      // targetsListBox
-      // 
-      this.targetsListBox.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.targetsListBox.FormattingEnabled = true;
-      this.targetsListBox.Location = new System.Drawing.Point(8, 15);
-      this.targetsListBox.Name = "targetsListBox";
-      this.targetsListBox.Size = new System.Drawing.Size(153, 79);
-      this.targetsListBox.TabIndex = 19;
-      this.targetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.targetsListBox_ItemCheck);
-      // 
-      // inputsListBox
-      // 
-      this.inputsListBox.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.inputsListBox.FormattingEnabled = true;
-      this.inputsListBox.Location = new System.Drawing.Point(6, 15);
-      this.inputsListBox.Name = "inputsListBox";
-      this.inputsListBox.Size = new System.Drawing.Size(141, 79);
-      this.inputsListBox.TabIndex = 21;
-      this.inputsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.inputsListBox_ItemCheck);
-      // 
-      // autoregressiveCheckBox
-      // 
-      this.autoregressiveCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
-      this.autoregressiveCheckBox.AutoSize = true;
-      this.autoregressiveCheckBox.Enabled = false;
-      this.autoregressiveCheckBox.Location = new System.Drawing.Point(131, 83);
-      this.autoregressiveCheckBox.Name = "autoregressiveCheckBox";
-      this.autoregressiveCheckBox.Size = new System.Drawing.Size(15, 14);
-      this.autoregressiveCheckBox.TabIndex = 22;
-      this.autoregressiveCheckBox.UseVisualStyleBackColor = true;
-      this.autoregressiveCheckBox.CheckedChanged += new System.EventHandler(this.autoregressiveCheckBox_CheckedChanged);
-      // 
-      // targetsGroupBox
-      // 
-      this.targetsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.targetsGroupBox.Controls.Add(this.targetsListBox);
-      this.targetsGroupBox.Location = new System.Drawing.Point(29, 515);
-      this.targetsGroupBox.Name = "targetsGroupBox";
-      this.targetsGroupBox.Size = new System.Drawing.Size(167, 100);
-      this.targetsGroupBox.TabIndex = 23;
-      this.targetsGroupBox.TabStop = false;
-      this.targetsGroupBox.Text = "Target variables";
-      // 
-      // inputsGroupBox
-      // 
-      this.inputsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.inputsGroupBox.Controls.Add(this.inputsListBox);
-      this.inputsGroupBox.Location = new System.Drawing.Point(202, 515);
-      this.inputsGroupBox.Name = "inputsGroupBox";
-      this.inputsGroupBox.Size = new System.Drawing.Size(153, 100);
-      this.inputsGroupBox.TabIndex = 24;
-      this.inputsGroupBox.TabStop = false;
-      this.inputsGroupBox.Text = "Input variables:";
-      // 
-      // partitioningGroupBox
-      // 
-      this.partitioningGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.partitioningGroupBox.Controls.Add(this.validationSamplesEndTextBox);
-      this.partitioningGroupBox.Controls.Add(this.trainingLabel);
-      this.partitioningGroupBox.Controls.Add(this.trainingSamplesStartTextBox);
-      this.partitioningGroupBox.Controls.Add(this.trainingSamplesEndTextBox);
-      this.partitioningGroupBox.Controls.Add(this.validationLabel);
-      this.partitioningGroupBox.Controls.Add(this.testSamplesEndTextBox);
-      this.partitioningGroupBox.Controls.Add(this.validationSamplesStartTextBox);
-      this.partitioningGroupBox.Controls.Add(this.testSamplesStartTextBox);
-      this.partitioningGroupBox.Controls.Add(this.testLabel);
-      this.partitioningGroupBox.Location = new System.Drawing.Point(29, 409);
-      this.partitioningGroupBox.Name = "partitioningGroupBox";
-      this.partitioningGroupBox.Size = new System.Drawing.Size(326, 100);
-      this.partitioningGroupBox.TabIndex = 25;
-      this.partitioningGroupBox.TabStop = false;
-      this.partitioningGroupBox.Text = "Data set partitions:";
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "txt";
-      this.openFileDialog.FileName = "txt";
-      this.openFileDialog.Filter = "Text files|*.txt|All files|*.*";
-      this.openFileDialog.Title = "Import data set from file";
-      // 
-      // classificationRadioButton
-      // 
-      this.classificationRadioButton.AutoSize = true;
-      this.classificationRadioButton.Checked = true;
-      this.classificationRadioButton.Location = new System.Drawing.Point(6, 16);
-      this.classificationRadioButton.Name = "classificationRadioButton";
-      this.classificationRadioButton.Size = new System.Drawing.Size(86, 17);
-      this.classificationRadioButton.TabIndex = 28;
-      this.classificationRadioButton.TabStop = true;
-      this.classificationRadioButton.Text = "Classification";
-      this.classificationRadioButton.UseVisualStyleBackColor = true;
-      this.classificationRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
-      // 
-      // regressionRadioButton
-      // 
-      this.regressionRadioButton.AutoSize = true;
-      this.regressionRadioButton.Location = new System.Drawing.Point(6, 39);
-      this.regressionRadioButton.Name = "regressionRadioButton";
-      this.regressionRadioButton.Size = new System.Drawing.Size(78, 17);
-      this.regressionRadioButton.TabIndex = 29;
-      this.regressionRadioButton.Text = "Regression";
-      this.regressionRadioButton.UseVisualStyleBackColor = true;
-      this.regressionRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
-      // 
-      // timeSeriesRadioButton
-      // 
-      this.timeSeriesRadioButton.AutoSize = true;
-      this.timeSeriesRadioButton.Location = new System.Drawing.Point(6, 62);
-      this.timeSeriesRadioButton.Name = "timeSeriesRadioButton";
-      this.timeSeriesRadioButton.Size = new System.Drawing.Size(119, 17);
-      this.timeSeriesRadioButton.TabIndex = 30;
-      this.timeSeriesRadioButton.Text = "Time series forecast";
-      this.timeSeriesRadioButton.UseVisualStyleBackColor = true;
-      this.timeSeriesRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
-      // 
-      // minTimeOffsetLabel
-      // 
-      this.minTimeOffsetLabel.AutoSize = true;
-      this.minTimeOffsetLabel.Enabled = false;
-      this.minTimeOffsetLabel.Location = new System.Drawing.Point(38, 106);
-      this.minTimeOffsetLabel.Name = "minTimeOffsetLabel";
-      this.minTimeOffsetLabel.Size = new System.Drawing.Size(87, 13);
-      this.minTimeOffsetLabel.TabIndex = 31;
-      this.minTimeOffsetLabel.Text = "Min. Time Offset:";
-      // 
-      // minTimeOffsetTextBox
-      // 
-      this.minTimeOffsetTextBox.Enabled = false;
-      this.minTimeOffsetTextBox.Location = new System.Drawing.Point(131, 103);
-      this.minTimeOffsetTextBox.Name = "minTimeOffsetTextBox";
-      this.minTimeOffsetTextBox.Size = new System.Drawing.Size(96, 20);
-      this.minTimeOffsetTextBox.TabIndex = 32;
-      this.minTimeOffsetTextBox.Validated += new System.EventHandler(this.timeOffsetTextBox_Validated);
-      this.minTimeOffsetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeOffsetTextBox_Validating);
-      // 
-      // learningTaskGroupBox
-      // 
-      this.learningTaskGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.learningTaskGroupBox.Controls.Add(this.autoregressiveLabel);
-      this.learningTaskGroupBox.Controls.Add(this.classificationRadioButton);
-      this.learningTaskGroupBox.Controls.Add(this.minTimeOffsetLabel);
-      this.learningTaskGroupBox.Controls.Add(this.minTimeOffsetTextBox);
-      this.learningTaskGroupBox.Controls.Add(this.maxTimeOffsetLabel);
-      this.learningTaskGroupBox.Controls.Add(this.regressionRadioButton);
-      this.learningTaskGroupBox.Controls.Add(this.maxTimeOffsetTextBox);
-      this.learningTaskGroupBox.Controls.Add(this.timeSeriesRadioButton);
-      this.learningTaskGroupBox.Controls.Add(this.autoregressiveCheckBox);
-      this.learningTaskGroupBox.Location = new System.Drawing.Point(29, 621);
-      this.learningTaskGroupBox.Name = "learningTaskGroupBox";
-      this.learningTaskGroupBox.Size = new System.Drawing.Size(326, 163);
-      this.learningTaskGroupBox.TabIndex = 35;
-      this.learningTaskGroupBox.TabStop = false;
-      this.learningTaskGroupBox.Text = "Learning task";
-      // 
-      // autoregressiveLabel
-      // 
-      this.autoregressiveLabel.AutoSize = true;
-      this.autoregressiveLabel.Enabled = false;
-      this.autoregressiveLabel.Location = new System.Drawing.Point(45, 83);
-      this.autoregressiveLabel.Name = "autoregressiveLabel";
-      this.autoregressiveLabel.Size = new System.Drawing.Size(80, 13);
-      this.autoregressiveLabel.TabIndex = 35;
-      this.autoregressiveLabel.Text = "Autoregressive:";
-      // 
-      // maxTimeOffsetLabel
-      // 
-      this.maxTimeOffsetLabel.AutoSize = true;
-      this.maxTimeOffsetLabel.Enabled = false;
-      this.maxTimeOffsetLabel.Location = new System.Drawing.Point(35, 132);
-      this.maxTimeOffsetLabel.Name = "maxTimeOffsetLabel";
-      this.maxTimeOffsetLabel.Size = new System.Drawing.Size(90, 13);
-      this.maxTimeOffsetLabel.TabIndex = 33;
-      this.maxTimeOffsetLabel.Text = "Max. Time Offset:";
-      // 
-      // maxTimeOffsetTextBox
-      // 
-      this.maxTimeOffsetTextBox.Enabled = false;
-      this.maxTimeOffsetTextBox.Location = new System.Drawing.Point(131, 129);
-      this.maxTimeOffsetTextBox.Name = "maxTimeOffsetTextBox";
-      this.maxTimeOffsetTextBox.Size = new System.Drawing.Size(96, 20);
-      this.maxTimeOffsetTextBox.TabIndex = 34;
-      this.maxTimeOffsetTextBox.Validated += new System.EventHandler(this.timeOffsetTextBox_Validated);
-      this.maxTimeOffsetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeOffsetTextBox_Validating);
-      // 
-      // 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(3, 32);
-      this.datasetView.Name = "datasetView";
-      this.datasetView.Size = new System.Drawing.Size(395, 371);
-      this.datasetView.TabIndex = 17;
-      // 
-      // ProblemView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.learningTaskGroupBox);
-      this.Controls.Add(this.partitioningGroupBox);
-      this.Controls.Add(this.inputsGroupBox);
-      this.Controls.Add(this.targetsGroupBox);
-      this.Controls.Add(this.datasetView);
-      this.Controls.Add(this.importButton);
-      this.Name = "ProblemView";
-      this.Size = new System.Drawing.Size(406, 787);
-      this.targetsGroupBox.ResumeLayout(false);
-      this.inputsGroupBox.ResumeLayout(false);
-      this.partitioningGroupBox.ResumeLayout(false);
-      this.partitioningGroupBox.PerformLayout();
-      this.learningTaskGroupBox.ResumeLayout(false);
-      this.learningTaskGroupBox.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Button importButton;
-    private System.Windows.Forms.TextBox trainingSamplesStartTextBox;
-    private System.Windows.Forms.Label trainingLabel;
-    private System.Windows.Forms.TextBox trainingSamplesEndTextBox;
-    private System.Windows.Forms.TextBox validationSamplesEndTextBox;
-    private System.Windows.Forms.TextBox validationSamplesStartTextBox;
-    private System.Windows.Forms.Label validationLabel;
-    private System.Windows.Forms.TextBox testSamplesEndTextBox;
-    private System.Windows.Forms.TextBox testSamplesStartTextBox;
-    private System.Windows.Forms.Label testLabel;
-    private HeuristicLab.DataAnalysis.DatasetView datasetView;
-    private System.Windows.Forms.CheckedListBox targetsListBox;
-    private System.Windows.Forms.CheckedListBox inputsListBox;
-    private System.Windows.Forms.CheckBox autoregressiveCheckBox;
-    private System.Windows.Forms.GroupBox targetsGroupBox;
-    private System.Windows.Forms.GroupBox inputsGroupBox;
-    private System.Windows.Forms.GroupBox partitioningGroupBox;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.RadioButton classificationRadioButton;
-    private System.Windows.Forms.RadioButton regressionRadioButton;
-    private System.Windows.Forms.RadioButton timeSeriesRadioButton;
-    private System.Windows.Forms.Label minTimeOffsetLabel;
-    private System.Windows.Forms.TextBox minTimeOffsetTextBox;
-    private System.Windows.Forms.GroupBox learningTaskGroupBox;
-    private System.Windows.Forms.Label maxTimeOffsetLabel;
-    private System.Windows.Forms.TextBox maxTimeOffsetTextBox;
-    private System.Windows.Forms.Label autoregressiveLabel;
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/ProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.cs	(revision 1528)
+++ 	(revision )
@@ -1,244 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAnalysis;
-using System.Diagnostics;
-
-namespace HeuristicLab.CEDMA.Core {
-  public partial class ProblemView : ViewBase {
-    private Problem problem;
-
-    public ProblemView(Problem problem) {
-      this.problem = problem;
-      InitializeComponent();
-      UpdateControls();
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      datasetView.Dataset = problem.DataSet;
-      trainingSamplesStartTextBox.Text = problem.TrainingSamplesStart.ToString();
-      trainingSamplesEndTextBox.Text = problem.TrainingSamplesEnd.ToString();
-      validationSamplesStartTextBox.Text = problem.ValidationSamplesStart.ToString();
-      validationSamplesEndTextBox.Text = problem.ValidationSamplesEnd.ToString();
-      testSamplesStartTextBox.Text = problem.TestSamplesStart.ToString();
-      testSamplesEndTextBox.Text = problem.TestSamplesEnd.ToString();
-      minTimeOffsetTextBox.Text = problem.MinTimeOffset.ToString();
-      maxTimeOffsetTextBox.Text = problem.MaxTimeOffset.ToString();
-      autoregressiveCheckBox.Checked = problem.AutoRegressive;
-      switch (problem.LearningTask) {
-        case LearningTask.Classification: classificationRadioButton.Checked = true; break;
-        case LearningTask.Regression: regressionRadioButton.Checked = true; break;
-        case LearningTask.TimeSeries: timeSeriesRadioButton.Checked = true; break;
-      }
-      targetsListBox.Items.Clear();
-      inputsListBox.Items.Clear();
-      for (int i = 0; i < problem.DataSet.Columns; i++) {
-        targetsListBox.Items.Add(problem.DataSet.GetVariableName(i), problem.AllowedTargetVariables.Contains(i));
-        inputsListBox.Items.Add(problem.DataSet.GetVariableName(i), problem.AllowedInputVariables.Contains(i));
-      }
-    }
-
-    private void importButton_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)problem.DataSet;
-          dataset.Rows = parser.Rows;
-          dataset.Columns = parser.Columns;
-          for (int i = 0; i < parser.VariableNames.Length; i++) {
-            dataset.SetVariableName(i, parser.VariableNames[i]);
-          }
-          dataset.Name = parser.ProblemName;
-          dataset.Samples = new double[dataset.Rows * dataset.Columns];
-          Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
-          datasetView.Dataset = problem.DataSet;
-
-          problem.TrainingSamplesStart = parser.TrainingSamplesStart;
-          problem.ValidationSamplesEnd = parser.TrainingSamplesStart;
-          problem.TrainingSamplesEnd = parser.TrainingSamplesEnd;
-          problem.ValidationSamplesStart = parser.ValidationSamplesStart;
-          problem.ValidationSamplesEnd = parser.ValidationSamplesEnd;
-          problem.TestSamplesStart = parser.TestSamplesStart;
-          problem.TestSamplesEnd = parser.TestSamplesEnd;
-          problem.AllowedTargetVariables.Add(parser.TargetVariable);
-
-          List<int> nonInputVariables = parser.NonInputVariables;
-          for (int i = 0; i < dataset.Columns; i++) {
-            if (!nonInputVariables.Contains(i)) problem.AllowedInputVariables.Add(i);
-          }
-          Refresh();
-        }
-      }
-
-    }
-
-    private void targetsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
-      if (e.NewValue == CheckState.Checked && !problem.AllowedTargetVariables.Contains(e.Index))
-        problem.AllowedTargetVariables.Add(e.Index);
-      else if (e.NewValue == CheckState.Unchecked && problem.AllowedTargetVariables.Contains(e.Index))
-        problem.AllowedTargetVariables.Remove(e.Index);
-    }
-
-    private void inputsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
-      if (e.NewValue == CheckState.Checked && !problem.AllowedInputVariables.Contains(e.Index))
-        problem.AllowedInputVariables.Add(e.Index);
-      else if (e.NewValue == CheckState.Unchecked && problem.AllowedInputVariables.Contains(e.Index))
-        problem.AllowedInputVariables.Remove(e.Index);
-    }
-
-    private void autoregressiveCheckBox_CheckedChanged(object sender, EventArgs e) {
-      problem.AutoRegressive = autoregressiveCheckBox.Checked;
-    }
-
-    private void samplesTextBox_Validating(object sender, CancelEventArgs e) {
-      try {
-        int trainingStart = int.Parse(trainingSamplesStartTextBox.Text);
-        int trainingEnd = int.Parse(trainingSamplesEndTextBox.Text);
-        int validationStart = int.Parse(validationSamplesStartTextBox.Text);
-        int validationEnd = int.Parse(validationSamplesEndTextBox.Text);
-        int testStart = int.Parse(testSamplesStartTextBox.Text);
-        int testEnd = int.Parse(testSamplesEndTextBox.Text);
-        if (trainingStart < 0 || validationStart < 0 || testStart < 0 ||
-          trainingEnd >= problem.DataSet.Rows || validationEnd >= problem.DataSet.Rows || testEnd >= problem.DataSet.Rows ||
-          trainingStart >= trainingEnd ||
-          validationStart >= validationEnd ||
-          testStart >= testEnd ||
-          IsOverlapping(trainingStart, trainingEnd, validationStart, validationEnd) ||
-          IsOverlapping(trainingStart, trainingEnd, testStart, testEnd) ||
-          IsOverlapping(validationStart, validationEnd, testStart, testEnd))
-          ColorSamplesTextBoxes(Color.Red);
-        else
-          ColorSamplesTextBoxes(Color.White);
-      }
-      catch (FormatException ex) {
-        ColorSamplesTextBoxes(Color.Red);
-      }
-    }
-
-    private void samplesTextBox_Validated(object sender, EventArgs e) {
-      problem.TrainingSamplesStart = int.Parse(trainingSamplesStartTextBox.Text);
-      problem.TrainingSamplesEnd = int.Parse(trainingSamplesEndTextBox.Text);
-      problem.ValidationSamplesStart = int.Parse(validationSamplesStartTextBox.Text);
-      problem.ValidationSamplesEnd = int.Parse(validationSamplesEndTextBox.Text);
-      problem.TestSamplesStart = int.Parse(testSamplesStartTextBox.Text);
-      problem.TestSamplesEnd = int.Parse(testSamplesEndTextBox.Text);
-    }
-
-    private void ColorSamplesTextBoxes(Color color) {
-      trainingSamplesStartTextBox.BackColor = color;
-      trainingSamplesEndTextBox.BackColor = color;
-      validationSamplesStartTextBox.BackColor = color;
-      validationSamplesEndTextBox.BackColor = color;
-      testSamplesStartTextBox.BackColor = color;
-      testSamplesEndTextBox.BackColor = color;
-    }
-
-    private bool IsOverlapping(int x0, int y0, int x1, int y1) {
-      Trace.Assert(x0 <= y0 && x1 <= y1);
-      int tmp;
-      // make sure that x0,y0 is the left interval
-      if (x1 < x0) {
-        tmp = x1;
-        x1 = x0;
-        x0 = tmp;
-        tmp = y1;
-        y1 = y0;
-        y0 = tmp;
-      }
-      return y0 > x1;
-    }
-    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();
-    }
-
-    #region gui events
-    private void radioButton_CheckedChanged(object sender, EventArgs e) {
-      minTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
-      minTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
-      maxTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
-      maxTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
-      autoregressiveCheckBox.Enabled = timeSeriesRadioButton.Checked;
-      autoregressiveLabel.Enabled = timeSeriesRadioButton.Checked;
-      if (timeSeriesRadioButton.Checked) problem.LearningTask = LearningTask.TimeSeries;
-      else if (classificationRadioButton.Checked) problem.LearningTask = LearningTask.Classification;
-      else if (regressionRadioButton.Checked) problem.LearningTask = LearningTask.Regression;
-    }
-
-    private void timeOffsetTextBox_Validating(object sender, CancelEventArgs e) {
-      int min, max;
-      e.Cancel = !int.TryParse(minTimeOffsetTextBox.Text, out min);
-      e.Cancel = !int.TryParse(maxTimeOffsetTextBox.Text, out max);
-      e.Cancel = min > max;
-    }
-    private void timeOffsetTextBox_Validated(object sender, EventArgs e) {
-      problem.MinTimeOffset = int.Parse(minTimeOffsetTextBox.Text);
-      problem.MaxTimeOffset = int.Parse(maxTimeOffsetTextBox.Text);
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/ProblemView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.CEDMA.Core/Results.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/Results.cs	(revision 1528)
+++ 	(revision )
@@ -1,158 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.Data;
-using HeuristicLab.DataAnalysis;
-using System.Drawing;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class Results : ItemBase {
-    private const int PAGE_SIZE = 1000;
-    private string[] categoricalVariables = null;
-    public string[] CategoricalVariables {
-      get {
-        if (categoricalVariables == null) {
-          LoadModelAttributes();
-        }
-        return categoricalVariables;
-      }
-    }
-
-    private string[] ordinalVariables = null;
-    public string[] OrdinalVariables {
-      get {
-        if (ordinalVariables == null) {
-          LoadModelAttributes();
-        }
-        return ordinalVariables;
-      }
-    }
-
-    private IStore store;
-    public IStore Store {
-      get { return store; }
-      set {
-        store = value;
-      }
-    }
-
-    private Dictionary<string, Dictionary<object, double>> categoricalValueIndices = new Dictionary<string, Dictionary<object, double>>();
-
-    private Entity dataSetEntity;
-
-    public Results(IStore store) {
-      this.store = store;
-    }
-
-    internal void FilterDataSet(Entity entity) {
-      this.dataSetEntity = entity;
-    }
-
-    private List<ResultsEntry> entries = null;
-    private bool cached = false;
-    public IEnumerable<ResultsEntry> GetEntries() {
-      if (!cached)
-        return SelectRows();
-      return entries.AsEnumerable();
-    }
-
-    private IEnumerable<ResultsEntry> SelectRows() {
-      int page = 0;
-      int resultsReturned = 0;
-      bool newEntry = false;
-      if (store == null) yield break;
-      entries = new List<ResultsEntry>();
-      do {
-        var allBindings = store.Query("<" + dataSetEntity + "> <" + Ontology.PredicateHasModel + "> ?Model ." + Environment.NewLine +
-          "?Model ?Attribute ?Value .", page, PAGE_SIZE);
-        var allModelBindings = allBindings.GroupBy(x => (Entity)x.Get("Model"));
-        resultsReturned = allBindings.Count;
-
-        foreach (var modelBindings in allModelBindings) {
-          ResultsEntry entry = entries.FirstOrDefault(x => x.Uri == modelBindings.Key.Uri);
-          newEntry = false;
-          if (entry == null) {
-            entry = new ResultsEntry();
-            entry.Uri = modelBindings.Key.Uri;
-            entries.Add(entry);
-            newEntry = true;
-          }
-          foreach (var binding in modelBindings) {
-            if (binding.Get("Value") is Literal) {
-              string name = ((Entity)binding.Get("Attribute")).Uri.Replace(Ontology.CedmaNameSpace, "");
-              if (entry.Get(name) == null) {
-                object value = ((Literal)binding.Get("Value")).Value;
-                entry.Set(name, value);
-              }
-            }
-          }
-          if (newEntry) yield return entry;
-        }
-        page++;
-      } while (resultsReturned == PAGE_SIZE);
-
-      FireChanged();
-      cached = true;
-    }
-
-    internal IEnumerable<string> SelectModelAttributes() {
-      return CategoricalVariables.Concat(OrdinalVariables);
-    }
-
-    private void LoadModelAttributes() {
-      this.ordinalVariables =
-        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeOrdinalAttribute + "> .", 0, 100)
-        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
-        .ToArray();
-      this.categoricalVariables =
-        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeCategoricalAttribute + "> .", 0, 100)
-        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
-        .ToArray();
-    }
-
-    public double IndexOfCategoricalValue(string variable, object value) {
-      if (value == null) return double.NaN;
-      Dictionary<object, double> valueToIndexMap;
-      if (categoricalValueIndices.ContainsKey(variable)) {
-        valueToIndexMap = categoricalValueIndices[variable];
-      } else {
-        valueToIndexMap = new Dictionary<object, double>();
-        categoricalValueIndices[variable] = valueToIndexMap;
-      }
-      if (!valueToIndexMap.ContainsKey(value)) {
-        if (valueToIndexMap.Values.Count == 0) valueToIndexMap[value] = 1.0;
-        else valueToIndexMap[value] = 1.0 + valueToIndexMap.Values.Max();
-      }
-      return valueToIndexMap[value];
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs	(revision 1528)
+++ 	(revision )
@@ -1,73 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.Core {
-  public class ResultsEntry {
-    private Dictionary<string, object> values = new Dictionary<string, object>();
-
-    private bool selected = false;
-    public bool Selected {
-      get { return selected; }
-      set { selected = value; }
-    }
-
-    private string uri;
-    public string Uri {
-      get { return uri; }
-      set { uri = value; }
-    }
-
-    public void Set(string name, object value) {
-      values.Add(name, value);
-    }
-
-    public object Get(string name) {
-      if (name == null || !values.ContainsKey(name)) return null;
-      return values[name];
-    }
-
-    public void ToggleSelected() {
-      selected = !selected;
-    }
-
-    public string GetToolTipText() {
-      StringBuilder b = new StringBuilder();
-      foreach (KeyValuePair<string, object> v in values) {
-        string val = v.Value.ToString();
-        if (val.Length > 40) val = val.Substring(0, 38) + "...";
-        b.Append(v.Key).Append(" = ").Append(val).AppendLine();
-      }
-      return b.ToString();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/StoreProxy.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/StoreProxy.cs	(revision 1528)
+++ 	(revision )
@@ -1,92 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 System.ServiceModel.Channels;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class StoreProxy : IStore {
-    private string serverUri;
-    private IStore store;
-    private NetTcpBinding binding;
-
-    public StoreProxy(string serverUri) {
-      this.serverUri = serverUri;
-      Reset();
-      Reconnect();
-    }
-
-    private void Reset() {
-      binding = new NetTcpBinding();
-      binding.ReceiveTimeout = new TimeSpan(1, 0, 0);
-      binding.MaxReceivedMessageSize = int.MaxValue;
-      binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
-      binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
-    }
-
-    private void Reconnect() {
-      ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding);
-      store = factory.CreateChannel(new EndpointAddress(serverUri));
-    }
-
-    private void ExecuteSavely(Action a) {
-      ExecuteSavely(a);
-    }
-
-    private T ExecuteSavely<T>(Func<T> a ) {
-      try {
-        return a();
-      }
-      catch (CommunicationException) {
-        Reconnect();
-        return a();
-      }
-      catch (TimeoutException) {
-        Reconnect();
-        return a();
-      }
-    }
-
-    #region IStore Members
-
-    public void Add(Statement statement) {
-      ExecuteSavely(() => store.Add(statement));
-    }
-
-    public ICollection<VariableBindings> Query(ICollection<Statement> query, int page, int pageSize) {
-      return ExecuteSavely(() => store.Query(query, page, pageSize));
-    }
-
-    public ICollection<VariableBindings> Query(string query, int page, int pageSize) {
-      return ExecuteSavely(() => store.Query(query, page, pageSize));
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,61 +1,0 @@
-﻿namespace HeuristicLab.CEDMA.Core {
-  partial class TableResultsView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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();
-      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // dataGridView
-      // 
-      this.dataGridView.AllowUserToAddRows = false;
-      this.dataGridView.AllowUserToDeleteRows = false;
-      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-      this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.dataGridView.Location = new System.Drawing.Point(0, 0);
-      this.dataGridView.Name = "dataGridView";
-      this.dataGridView.ReadOnly = true;
-      this.dataGridView.Size = new System.Drawing.Size(450, 459);
-      this.dataGridView.TabIndex = 0;
-      this.dataGridView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridView_MouseDoubleClick);
-      this.dataGridView.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);
-      // 
-      // TableResultsView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.dataGridView);
-      this.Name = "TableResultsView";
-      this.Size = new System.Drawing.Size(450, 459);
-      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.DataGridView dataGridView;
-
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/TableResultsView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.cs	(revision 1528)
+++ 	(revision )
@@ -1,90 +1,0 @@
-﻿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.CEDMA.Core;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Core {
-
-  public partial class TableResultsView : ViewBase {
-    private Results Results {
-      get { return (Results)Item; }
-      set { Item = value; }
-    }
-    private bool suppressEvents;
-    public TableResultsView(Results results) {
-      suppressEvents = false;
-      InitializeComponent();
-      Results = results;
-      results.Changed += new EventHandler(results_Changed);
-    }
-
-    void results_Changed(object sender, EventArgs e) {
-      if (suppressEvents) return;
-      UpdateControls();
-    }
-
-    protected override void UpdateControls() {
-      suppressEvents = true;
-      dataGridView.Rows.Clear();
-      dataGridView.Columns.Clear();
-      List<string> attributeNames = Results.SelectModelAttributes().ToList();
-      foreach (var attribute in attributeNames) {
-        dataGridView.Columns.Add(attribute, attribute);
-      }
-
-      var entries = Results.GetEntries();
-      foreach (var entry in entries) {
-        int rowIndex = dataGridView.Rows.Add();
-        dataGridView.Rows[rowIndex].Tag = entry;
-        foreach (string attrName in attributeNames) {
-          dataGridView.Rows[rowIndex].Cells[attrName].Value = entry.Get(attrName);
-        }
-        if (entry.Selected) dataGridView.Rows[rowIndex].Selected = true;
-      }
-      dataGridView.Update();
-      suppressEvents = false;
-    }
-
-    private void dataGridView_SelectionChanged(object sender, EventArgs e) {
-      if (suppressEvents) return;
-      foreach (DataGridViewRow row in dataGridView.Rows) {
-        ((ResultsEntry)row.Tag).Selected = row.Selected;
-      }
-      suppressEvents = true;
-      Results.FireChanged();
-      suppressEvents = false;
-    }
-
-    private void dataGridView_MouseDoubleClick(object sender, MouseEventArgs e) {
-      if (e.Button == MouseButtons.Left && e.Clicks == 2) {
-        DataGridView.HitTestInfo hitInfo = dataGridView.HitTest(e.X, e.Y);
-        ResultsEntry entry = (ResultsEntry)dataGridView.Rows[hitInfo.RowIndex].Tag;
-        string serializedData =  (string)entry.Get(Ontology.PredicateSerializedData.Uri.Replace(Ontology.CedmaNameSpace, ""));
-        var model = (IItem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(serializedData));
-        PluginManager.ControlManager.ShowControl(model.CreateView());
-      }
-    }
-  }
-
-  public class TablesResultsViewFactory : IResultsViewFactory {
-    #region IResultsViewFactory Members
-
-    public string Name {
-      get { return "Table"; }
-    }
-
-    public IControl CreateView(Results results) {
-      return new TableResultsView(results);
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Core/TableResultsView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/AgentEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/AgentEntry.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/AgentEntry.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Entity.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Entity.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Entity.cs	(revision 1529)
@@ -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.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 string ToString() {
+      return 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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/HeuristicLab.CEDMA.DB.Interfaces.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1529)
@@ -0,0 +1,127 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="Variable.cs" />
+    <Compile Include="Ontology.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="HeuristicLabCedmaDbInterfacesPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="VariableBindings.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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/HeuristicLabCedmaDbInterfacesPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/HeuristicLabCedmaDbInterfacesPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/HeuristicLabCedmaDbInterfacesPlugin.cs	(revision 1529)
@@ -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.3")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.DB.Interfaces-3.3.dll", Filetype = PluginFileType.Assembly)]
+  public class HeuristicLabCedmaDbInterfacesPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/IDatabase.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/IDatabase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/IDatabase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/IStore.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/IStore.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/IStore.cs	(revision 1529)
@@ -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]
+    ICollection<VariableBindings> Query(ICollection<Statement> query, int page, int pageSize);
+
+    [OperationContract(Name="QueryN3")]
+    ICollection<VariableBindings> Query(string query, int page, int pageSize);
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Literal.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Literal.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Literal.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Ontology.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Ontology.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Ontology.cs	(revision 1529)
@@ -0,0 +1,239 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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 {
+  public static class Ontology {
+    public static string CedmaNameSpace {
+      get { return "http://www.heuristiclab.com/cedma/"; }
+    }
+
+    #region model attribute types
+    /// <summary>
+    /// Attribute value is ordinal, values can be sorted.
+    /// Examples are quality measures or complexity measures.
+    /// </summary>
+    public static Entity TypeOrdinalAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeOrdinalAttribute"); }
+    }
+    /// <summary>
+    /// Attribute value is categorical and thus can't be sorted.
+    /// Examples is target-variable.
+    /// </summary>
+    public static Entity TypeCategoricalAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeCategoricalAttribute"); }
+    }
+    /// <summary>
+    /// Attribute is a quality measure
+    /// </summary>
+    public static Entity TypeQualityAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeQualityAttribute"); }
+    }
+    /// <summary>
+    /// Attribute is a complexity measure
+    /// </summary>
+    public static Entity TypeComplexityAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeComplexityAttribute"); }
+    }
+    #endregion
+
+    #region meta-data predicates
+    public static Entity PredicateName {
+      get { return new Entity(CedmaNameSpace + "Name"); }
+    }
+    /// <summary>
+    /// Each entity can have a serialized XML representation that can be loaded in HL.
+    /// </summary>
+    public static Entity PredicateSerializedData {
+      get { return new Entity(CedmaNameSpace + "SerializedData"); }
+    }
+    /// <summary>
+    /// Link from data set to model.
+    /// A data set can have multiple models.
+    /// </summary>
+    public static Entity PredicateHasModel {
+      get { return new Entity(CedmaNameSpace + "Model"); }
+    }
+    /// <summary>
+    /// Link from model to algorithm.
+    /// An algorithm can generate multiple models, each model is generated by exactly one algorithm.
+    /// </summary>
+    public static Entity PredicateGeneratedBy {
+      get { return new Entity(CedmaNameSpace + "GeneratedBy"); }
+    }
+    #endregion
+
+    #region types and type relations
+    public static Entity PredicateInstanceOf {
+      get { return new Entity(CedmaNameSpace + "InstanceOf"); }
+    }
+    public static Entity TypeGeneticProgrammingFunctionTree {
+      get { return new Entity(CedmaNameSpace + "FunctionTree"); }
+    }
+    public static Entity TypeDataSet {
+      get { return new Entity(CedmaNameSpace + "DataSet"); }
+    }
+    public static Entity TypeAlgorithm {
+      get { return new Entity(CedmaNameSpace + "Algorithm"); }
+    }
+    public static Entity TypeModel {
+      get { return new Entity(CedmaNameSpace + "Model"); }
+    }
+    #endregion
+
+    #region default attributes
+    public static Entity TargetVariable {
+      get { return new Entity(CedmaNameSpace + "TargetVariable"); }
+    }
+    public static Entity AlgorithmName {
+      get { return new Entity(CedmaNameSpace + "AlgorithmName"); }
+    }
+    public static Entity TrainingMeanSquaredError {
+      get { return new Entity(CedmaNameSpace + "TrainingMeanSquaredError"); }
+    }
+    public static Entity ValidationMeanSquaredError {
+      get { return new Entity(CedmaNameSpace + "ValidationMeanSquaredError"); }
+    }
+    public static Entity TestMeanSquaredError {
+      get { return new Entity(CedmaNameSpace + "TestMeanSquaredError"); }
+    }
+    public static Entity TrainingMeanAbsolutePercentageError {
+      get { return new Entity(CedmaNameSpace + "TrainingMeanAbsolutePercentageError"); }
+    }
+    public static Entity ValidationMeanAbsolutePercentageError {
+      get { return new Entity(CedmaNameSpace + "ValidationMeanAbsolutePercentageError"); }
+    }
+    public static Entity TestMeanAbsolutePercentageError {
+      get { return new Entity(CedmaNameSpace + "TestMeanAbsolutePercentageError"); }
+    }
+    public static Entity TrainingMeanAbsolutePercentageOfRangeError {
+      get { return new Entity(CedmaNameSpace + "TrainingMeanAbsolutePercentageOfRangeError"); }
+    }
+    public static Entity ValidationMeanAbsolutePercentageOfRangeError {
+      get { return new Entity(CedmaNameSpace + "ValidationMeanAbsolutePercentageOfRangeError"); }
+    }
+    public static Entity TestMeanAbsolutePercentageOfRangeError {
+      get { return new Entity(CedmaNameSpace + "TestMeanAbsolutePercentageOfRangeError"); }
+    }
+    public static Entity TrainingCoefficientOfDetermination {
+      get { return new Entity(CedmaNameSpace + "TrainingCoefficientOfDetermination"); }
+    }
+    public static Entity ValidationCoefficientOfDetermination {
+      get { return new Entity(CedmaNameSpace + "ValidationCoefficientOfDetermination"); }
+    }
+    public static Entity TestCoefficientOfDetermination {
+      get { return new Entity(CedmaNameSpace + "TestCoefficientOfDetermination"); }
+    }
+    public static Entity TrainingAccuracy {
+      get { return new Entity(CedmaNameSpace + "TrainingAccuracy"); }
+    }
+    public static Entity ValidationAccuracy {
+      get { return new Entity(CedmaNameSpace + "ValidationAccuracy"); }
+    }
+    public static Entity TestAccuracy {
+      get { return new Entity(CedmaNameSpace + "TestAccuracy"); }
+    }
+    public static Entity TrainingTheilsInequalityCoefficient {
+      get { return new Entity(CedmaNameSpace + "TrainingTheilsInequalityCoefficient"); }
+    }
+    public static Entity ValidationTheilsInequalityCoefficient {
+      get { return new Entity(CedmaNameSpace + "ValidationTheilsInequalityCoefficient"); }
+    }
+    public static Entity TestTheilsInequalityCoefficient {
+      get { return new Entity(CedmaNameSpace + "TestTheilsInequalityCoefficient"); }
+    }
+    public static Entity TreeSize {
+      get { return new Entity(CedmaNameSpace + "TreeSize"); }
+    }
+    public static Entity TreeHeight {
+      get { return new Entity(CedmaNameSpace + "TreeHeight"); }
+    }
+    public static Entity EvaluatedSolutions {
+      get { return new Entity(CedmaNameSpace + "EvaluatedSolutions"); }
+    }
+    #endregion
+
+    public static ICollection<Statement> InitialStatements {
+      get {
+        return new List<Statement> {
+          new Statement(TargetVariable, PredicateInstanceOf, TypeCategoricalAttribute),
+          new Statement(AlgorithmName, PredicateInstanceOf, TypeCategoricalAttribute),
+          new Statement(TrainingMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingAccuracy, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationAccuracy, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestAccuracy, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
+
+          new Statement(TreeSize, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TreeSize, PredicateInstanceOf, TypeComplexityAttribute),
+          new Statement(TreeHeight, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TreeHeight, PredicateInstanceOf, TypeComplexityAttribute),
+          new Statement(EvaluatedSolutions, PredicateInstanceOf, TypeOrdinalAttribute)
+        };
+      }
+    }
+
+
+    /// <summary>
+    /// Wildcard entity for filtering.
+    /// </summary>
+    public static Entity AnyEntity {
+      get { return new Entity(null); }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/OperatorEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/OperatorEntry.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/OperatorEntry.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/ProcessStatus.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/ProcessStatus.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/ProcessStatus.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Resource.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Resource.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Resource.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/ResultEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/ResultEntry.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/ResultEntry.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/SelectFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/SelectFilter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/SelectFilter.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/SerializedLiteral.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/SerializedLiteral.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/SerializedLiteral.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Statement.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Statement.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Statement.cs	(revision 1529)
@@ -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.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))]
+  [KnownType(typeof(Variable))]
+  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: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Variable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/Variable.cs	(revision 1529)
@@ -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 Variable: Entity {
+    [DataMember]
+    public string Name { get; set; }
+
+    public Variable(string name) : base(name) {
+      this.Name = name;
+    }
+
+    public override bool Equals(object obj) {
+      if(this == obj) return true;
+      Variable other = obj as Variable;
+      if(obj == null) return false;
+      else return other.Name.Equals(this.Name);
+    }
+
+    public override int GetHashCode() {
+      return Name.GetHashCode();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/VariableBindings.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/VariableBindings.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/3.3/VariableBindings.cs	(revision 1529)
@@ -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.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using System.Data;
+using System.Data.Common;
+using System.Threading;
+using System.Xml;
+using System.IO;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  [KnownType(typeof(Literal))]
+  [KnownType(typeof(Entity))]
+  [KnownType(typeof(SerializedLiteral))]
+  public class VariableBindings : IEnumerable<KeyValuePair<string,object>> {
+
+    [DataMember]
+    private Dictionary<string,object> bindings;
+
+    public VariableBindings() {
+      bindings = new Dictionary<string, object>();
+    }
+
+    public void Add(string name, object value) {
+      bindings.Add(name, value);
+    }
+
+    public object Get(string name) {
+      return bindings[name];
+    }
+
+    #region IEnumerable<KeyValuePair<string,object>> Members
+
+    public IEnumerator<KeyValuePair<string, object>> GetEnumerator() {
+      return bindings.GetEnumerator();
+    }
+
+    #endregion
+
+    #region IEnumerable Members
+
+    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    #endregion
+  }
+}
Index: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/AgentEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/AgentEntry.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs	(revision 1528)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 string ToString() {
-      return 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1528)
+++ 	(revision )
@@ -1,127 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="Variable.cs" />
-    <Compile Include="Ontology.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="HeuristicLabCedmaDbInterfacesPlugin.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="VariableBindings.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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLabCedmaDbInterfacesPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLabCedmaDbInterfacesPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.CEDMA.DB.Interfaces-3.3.dll", Filetype = PluginFileType.Assembly)]
-  public class HeuristicLabCedmaDbInterfacesPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs	(revision 1528)
+++ 	(revision )
@@ -1,85 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs	(revision 1528)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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]
-    ICollection<VariableBindings> Query(ICollection<Statement> query, int page, int pageSize);
-
-    [OperationContract(Name="QueryN3")]
-    ICollection<VariableBindings> Query(string query, int page, int pageSize);
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/Literal.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Literal.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/Ontology.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Ontology.cs	(revision 1528)
+++ 	(revision )
@@ -1,239 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 {
-  public static class Ontology {
-    public static string CedmaNameSpace {
-      get { return "http://www.heuristiclab.com/cedma/"; }
-    }
-
-    #region model attribute types
-    /// <summary>
-    /// Attribute value is ordinal, values can be sorted.
-    /// Examples are quality measures or complexity measures.
-    /// </summary>
-    public static Entity TypeOrdinalAttribute {
-      get { return new Entity(CedmaNameSpace + "TypeOrdinalAttribute"); }
-    }
-    /// <summary>
-    /// Attribute value is categorical and thus can't be sorted.
-    /// Examples is target-variable.
-    /// </summary>
-    public static Entity TypeCategoricalAttribute {
-      get { return new Entity(CedmaNameSpace + "TypeCategoricalAttribute"); }
-    }
-    /// <summary>
-    /// Attribute is a quality measure
-    /// </summary>
-    public static Entity TypeQualityAttribute {
-      get { return new Entity(CedmaNameSpace + "TypeQualityAttribute"); }
-    }
-    /// <summary>
-    /// Attribute is a complexity measure
-    /// </summary>
-    public static Entity TypeComplexityAttribute {
-      get { return new Entity(CedmaNameSpace + "TypeComplexityAttribute"); }
-    }
-    #endregion
-
-    #region meta-data predicates
-    public static Entity PredicateName {
-      get { return new Entity(CedmaNameSpace + "Name"); }
-    }
-    /// <summary>
-    /// Each entity can have a serialized XML representation that can be loaded in HL.
-    /// </summary>
-    public static Entity PredicateSerializedData {
-      get { return new Entity(CedmaNameSpace + "SerializedData"); }
-    }
-    /// <summary>
-    /// Link from data set to model.
-    /// A data set can have multiple models.
-    /// </summary>
-    public static Entity PredicateHasModel {
-      get { return new Entity(CedmaNameSpace + "Model"); }
-    }
-    /// <summary>
-    /// Link from model to algorithm.
-    /// An algorithm can generate multiple models, each model is generated by exactly one algorithm.
-    /// </summary>
-    public static Entity PredicateGeneratedBy {
-      get { return new Entity(CedmaNameSpace + "GeneratedBy"); }
-    }
-    #endregion
-
-    #region types and type relations
-    public static Entity PredicateInstanceOf {
-      get { return new Entity(CedmaNameSpace + "InstanceOf"); }
-    }
-    public static Entity TypeGeneticProgrammingFunctionTree {
-      get { return new Entity(CedmaNameSpace + "FunctionTree"); }
-    }
-    public static Entity TypeDataSet {
-      get { return new Entity(CedmaNameSpace + "DataSet"); }
-    }
-    public static Entity TypeAlgorithm {
-      get { return new Entity(CedmaNameSpace + "Algorithm"); }
-    }
-    public static Entity TypeModel {
-      get { return new Entity(CedmaNameSpace + "Model"); }
-    }
-    #endregion
-
-    #region default attributes
-    public static Entity TargetVariable {
-      get { return new Entity(CedmaNameSpace + "TargetVariable"); }
-    }
-    public static Entity AlgorithmName {
-      get { return new Entity(CedmaNameSpace + "AlgorithmName"); }
-    }
-    public static Entity TrainingMeanSquaredError {
-      get { return new Entity(CedmaNameSpace + "TrainingMeanSquaredError"); }
-    }
-    public static Entity ValidationMeanSquaredError {
-      get { return new Entity(CedmaNameSpace + "ValidationMeanSquaredError"); }
-    }
-    public static Entity TestMeanSquaredError {
-      get { return new Entity(CedmaNameSpace + "TestMeanSquaredError"); }
-    }
-    public static Entity TrainingMeanAbsolutePercentageError {
-      get { return new Entity(CedmaNameSpace + "TrainingMeanAbsolutePercentageError"); }
-    }
-    public static Entity ValidationMeanAbsolutePercentageError {
-      get { return new Entity(CedmaNameSpace + "ValidationMeanAbsolutePercentageError"); }
-    }
-    public static Entity TestMeanAbsolutePercentageError {
-      get { return new Entity(CedmaNameSpace + "TestMeanAbsolutePercentageError"); }
-    }
-    public static Entity TrainingMeanAbsolutePercentageOfRangeError {
-      get { return new Entity(CedmaNameSpace + "TrainingMeanAbsolutePercentageOfRangeError"); }
-    }
-    public static Entity ValidationMeanAbsolutePercentageOfRangeError {
-      get { return new Entity(CedmaNameSpace + "ValidationMeanAbsolutePercentageOfRangeError"); }
-    }
-    public static Entity TestMeanAbsolutePercentageOfRangeError {
-      get { return new Entity(CedmaNameSpace + "TestMeanAbsolutePercentageOfRangeError"); }
-    }
-    public static Entity TrainingCoefficientOfDetermination {
-      get { return new Entity(CedmaNameSpace + "TrainingCoefficientOfDetermination"); }
-    }
-    public static Entity ValidationCoefficientOfDetermination {
-      get { return new Entity(CedmaNameSpace + "ValidationCoefficientOfDetermination"); }
-    }
-    public static Entity TestCoefficientOfDetermination {
-      get { return new Entity(CedmaNameSpace + "TestCoefficientOfDetermination"); }
-    }
-    public static Entity TrainingAccuracy {
-      get { return new Entity(CedmaNameSpace + "TrainingAccuracy"); }
-    }
-    public static Entity ValidationAccuracy {
-      get { return new Entity(CedmaNameSpace + "ValidationAccuracy"); }
-    }
-    public static Entity TestAccuracy {
-      get { return new Entity(CedmaNameSpace + "TestAccuracy"); }
-    }
-    public static Entity TrainingTheilsInequalityCoefficient {
-      get { return new Entity(CedmaNameSpace + "TrainingTheilsInequalityCoefficient"); }
-    }
-    public static Entity ValidationTheilsInequalityCoefficient {
-      get { return new Entity(CedmaNameSpace + "ValidationTheilsInequalityCoefficient"); }
-    }
-    public static Entity TestTheilsInequalityCoefficient {
-      get { return new Entity(CedmaNameSpace + "TestTheilsInequalityCoefficient"); }
-    }
-    public static Entity TreeSize {
-      get { return new Entity(CedmaNameSpace + "TreeSize"); }
-    }
-    public static Entity TreeHeight {
-      get { return new Entity(CedmaNameSpace + "TreeHeight"); }
-    }
-    public static Entity EvaluatedSolutions {
-      get { return new Entity(CedmaNameSpace + "EvaluatedSolutions"); }
-    }
-    #endregion
-
-    public static ICollection<Statement> InitialStatements {
-      get {
-        return new List<Statement> {
-          new Statement(TargetVariable, PredicateInstanceOf, TypeCategoricalAttribute),
-          new Statement(AlgorithmName, PredicateInstanceOf, TypeCategoricalAttribute),
-          new Statement(TrainingMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TrainingMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(ValidationMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(ValidationMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TestMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TestMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TrainingMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TrainingMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(ValidationMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(ValidationMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TestMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TestMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TrainingMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TrainingMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(ValidationMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(ValidationMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TestMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TestMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TrainingCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TrainingCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(ValidationCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(ValidationCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TestCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TestCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TrainingAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TrainingAccuracy, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(ValidationAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(ValidationAccuracy, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TestAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TestAccuracy, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TrainingTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TrainingTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(ValidationTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(ValidationTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
-          new Statement(TestTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TestTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
-
-          new Statement(TreeSize, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TreeSize, PredicateInstanceOf, TypeComplexityAttribute),
-          new Statement(TreeHeight, PredicateInstanceOf, TypeOrdinalAttribute),
-          new Statement(TreeHeight, PredicateInstanceOf, TypeComplexityAttribute),
-          new Statement(EvaluatedSolutions, PredicateInstanceOf, TypeOrdinalAttribute)
-        };
-      }
-    }
-
-
-    /// <summary>
-    /// Wildcard entity for filtering.
-    /// </summary>
-    public static Entity AnyEntity {
-      get { return new Entity(null); }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/OperatorEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/OperatorEntry.cs	(revision 1528)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/ProcessStatus.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/ProcessStatus.cs	(revision 1528)
+++ 	(revision )
@@ -1,29 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/Resource.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Resource.cs	(revision 1528)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/ResultEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/ResultEntry.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/SelectFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/SelectFilter.cs	(revision 1528)
+++ 	(revision )
@@ -1,48 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/SerializedLiteral.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/SerializedLiteral.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs	(revision 1528)
+++ 	(revision )
@@ -1,49 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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))]
-  [KnownType(typeof(Variable))]
-  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: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Variable.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 Variable: Entity {
-    [DataMember]
-    public string Name { get; set; }
-
-    public Variable(string name) : base(name) {
-      this.Name = name;
-    }
-
-    public override bool Equals(object obj) {
-      if(this == obj) return true;
-      Variable other = obj as Variable;
-      if(obj == null) return false;
-      else return other.Name.Equals(this.Name);
-    }
-
-    public override int GetHashCode() {
-      return Name.GetHashCode();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.DB.Interfaces/VariableBindings.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/VariableBindings.cs	(revision 1528)
+++ 	(revision )
@@ -1,73 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.ServiceModel;
-using System.Data;
-using System.Data.Common;
-using System.Threading;
-using System.Xml;
-using System.IO;
-using System.Runtime.Serialization;
-
-namespace HeuristicLab.CEDMA.DB.Interfaces {
-  [DataContract]
-  [KnownType(typeof(Literal))]
-  [KnownType(typeof(Entity))]
-  [KnownType(typeof(SerializedLiteral))]
-  public class VariableBindings : IEnumerable<KeyValuePair<string,object>> {
-
-    [DataMember]
-    private Dictionary<string,object> bindings;
-
-    public VariableBindings() {
-      bindings = new Dictionary<string, object>();
-    }
-
-    public void Add(string name, object value) {
-      bindings.Add(name, value);
-    }
-
-    public object Get(string name) {
-      return bindings[name];
-    }
-
-    #region IEnumerable<KeyValuePair<string,object>> Members
-
-    public IEnumerator<KeyValuePair<string, object>> GetEnumerator() {
-      return bindings.GetEnumerator();
-    }
-
-    #endregion
-
-    #region IEnumerable Members
-
-    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
-      return GetEnumerator();
-    }
-
-    #endregion
-  }
-}
Index: /trunk/sources/HeuristicLab.CEDMA.DB/3.3/HeuristicLab.CEDMA.DB.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/3.3/HeuristicLab.CEDMA.DB.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/3.3/HeuristicLab.CEDMA.DB.csproj	(revision 1529)
@@ -0,0 +1,139 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="SemWeb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="SemWeb.SqliteStore, Version=1.0.0.0, Culture=neutral, 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.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="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>
+    <Content Include="SemWeb.SqliteStore.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: /trunk/sources/HeuristicLab.CEDMA.DB/3.3/HeuristicLabCedmaDbPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/3.3/HeuristicLabCedmaDbPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/3.3/HeuristicLabCedmaDbPlugin.cs	(revision 1529)
@@ -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.DB {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.DB-3.3")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.DB-3.3.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  public class HeuristicLabCedmaDbPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.CEDMA.DB/3.3/Store.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/3.3/Store.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/3.3/Store.cs	(revision 1529)
@@ -0,0 +1,201 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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.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);
+        InitStore();
+      }
+    }
+
+    private void InitStore() {
+      foreach (Statement s in Ontology.InitialStatements) {
+        Add(s);
+      }
+    }
+
+    public void Add(Statement statement) {
+      lock (bigLock) {
+        store.Add(Translate(statement));
+      }
+    }
+
+
+    public ICollection<VariableBindings> Query(string query, int page, int pageSize) {
+      MyQueryResultSink resultSink = new MyQueryResultSink();
+      SemWeb.N3Reader n3Reader = new SemWeb.N3Reader(new StringReader(query));
+      SemWeb.Query.GraphMatch matcher = new SemWeb.Query.GraphMatch(n3Reader);
+      matcher.Run(store, resultSink);
+      return resultSink.Bindings.Skip(page*pageSize).Take(pageSize).ToList();
+    }
+
+    public ICollection<VariableBindings> Query(ICollection<Statement> query, int page, int pageSize) {
+      MyQueryResultSink resultSink = new MyQueryResultSink();
+      Translate(query).Run(store, resultSink);
+      return resultSink.Bindings.Skip(page * pageSize).Take(pageSize).ToList();
+    }
+
+    private SemWeb.Query.Query Translate(ICollection<Statement> query) {
+      Dictionary<object, object> translatedObjects = new Dictionary<object, object>();
+      SemWeb.MemoryStore queryStore = new SemWeb.MemoryStore(query.Select(st => Translate(st, translatedObjects)).ToArray());
+
+      return new SemWeb.Query.GraphMatch(queryStore);
+    }
+
+    private static SemWeb.Entity Translate(Entity e) {
+      return e.Uri == null ? null : new SemWeb.Entity(e.Uri);
+    }
+
+    private static 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 static Statement Translate(SemWeb.Statement statement) {
+      return Translate(statement, new Dictionary<object, object>());
+    }
+
+    private static Statement Translate(SemWeb.Statement statement, Dictionary<object, object> translatedObjects) {
+      if (!translatedObjects.ContainsKey(statement.Subject)) {
+        translatedObjects[statement.Subject] = new Entity(statement.Subject.Uri);
+      }
+      if (!translatedObjects.ContainsKey(statement.Predicate)) {
+        translatedObjects[statement.Predicate] = new Entity(statement.Predicate.Uri);
+      }
+      if (!translatedObjects.ContainsKey(statement.Object)) {
+        if (statement.Object is SemWeb.Literal) {
+          translatedObjects[statement.Object] = TranslateLiteral((SemWeb.Literal)statement.Object);
+        } else {
+          translatedObjects[statement.Object] = new Entity(((SemWeb.Entity)statement.Object).Uri);
+        }
+      }
+
+      Entity subjectEntity = (Entity)translatedObjects[statement.Subject];
+      Entity predicateEntity = (Entity)translatedObjects[statement.Predicate];
+      Resource property = (Resource)translatedObjects[statement.Object];
+
+      return new Statement(
+        subjectEntity,
+        predicateEntity,
+        property);
+    }
+
+    private static SemWeb.Statement Translate(Statement statement) {
+      return Translate(statement, new Dictionary<object, object>());
+    }
+
+    private static SemWeb.Statement Translate(Statement statement, Dictionary<object, object> translatedObjects) {
+      if (!translatedObjects.ContainsKey(statement.Subject)) {
+        translatedObjects[statement.Subject] = Translate(statement.Subject);
+      }
+      if (!translatedObjects.ContainsKey(statement.Predicate)) {
+        translatedObjects[statement.Predicate] = Translate(statement.Predicate);
+      }
+      if (!translatedObjects.ContainsKey(statement.Property)) {
+        translatedObjects[statement.Property] = Translate(statement.Property);
+      }
+
+      SemWeb.Entity subject = (SemWeb.Entity)translatedObjects[statement.Subject];
+      SemWeb.Entity predicate = (SemWeb.Entity)translatedObjects[statement.Predicate];
+      SemWeb.Resource property = (SemWeb.Resource)translatedObjects[statement.Property];
+
+      return new SemWeb.Statement(
+        subject,
+        predicate,
+        property);
+    }
+
+    private static SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
+      if (l.RawData == null) return null;
+      return new SemWeb.Literal(l.RawData, null, "serializedItem");
+    }
+
+    private static 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 static 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);
+      }
+    }
+
+    private class MyQueryResultSink : SemWeb.Query.QueryResultSink {
+
+      private List<VariableBindings> bindings = new List<VariableBindings>();
+      public ICollection<VariableBindings> Bindings {
+        get { return bindings.AsReadOnly(); }
+      }
+
+      public override bool Add(SemWeb.Query.VariableBindings result) {
+        VariableBindings varBindings = new VariableBindings();
+        foreach (SemWeb.Variable var in result.Variables) {
+          if (var.LocalName != null && result[var] != null) {
+            if (result[var] is SemWeb.Literal) {
+              varBindings.Add(var.LocalName, TranslateLiteral((SemWeb.Literal)result[var]));
+            } else {
+              varBindings.Add(var.LocalName, new Entity(((SemWeb.Entity)result[var]).Uri));
+            }
+          }
+          bindings.Add(varBindings);
+        }
+        return true;
+      }
+    }
+  }
+}
Index: unk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 1528)
+++ 	(revision )
@@ -1,139 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="SemWeb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="SemWeb.SqliteStore, Version=1.0.0.0, Culture=neutral, 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.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="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>
-    <Content Include="SemWeb.SqliteStore.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: unk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.CEDMA.DB-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
-  public class HeuristicLabCedmaDbPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.DB/Store.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/Store.cs	(revision 1528)
+++ 	(revision )
@@ -1,201 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.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);
-        InitStore();
-      }
-    }
-
-    private void InitStore() {
-      foreach (Statement s in Ontology.InitialStatements) {
-        Add(s);
-      }
-    }
-
-    public void Add(Statement statement) {
-      lock (bigLock) {
-        store.Add(Translate(statement));
-      }
-    }
-
-
-    public ICollection<VariableBindings> Query(string query, int page, int pageSize) {
-      MyQueryResultSink resultSink = new MyQueryResultSink();
-      SemWeb.N3Reader n3Reader = new SemWeb.N3Reader(new StringReader(query));
-      SemWeb.Query.GraphMatch matcher = new SemWeb.Query.GraphMatch(n3Reader);
-      matcher.Run(store, resultSink);
-      return resultSink.Bindings.Skip(page*pageSize).Take(pageSize).ToList();
-    }
-
-    public ICollection<VariableBindings> Query(ICollection<Statement> query, int page, int pageSize) {
-      MyQueryResultSink resultSink = new MyQueryResultSink();
-      Translate(query).Run(store, resultSink);
-      return resultSink.Bindings.Skip(page * pageSize).Take(pageSize).ToList();
-    }
-
-    private SemWeb.Query.Query Translate(ICollection<Statement> query) {
-      Dictionary<object, object> translatedObjects = new Dictionary<object, object>();
-      SemWeb.MemoryStore queryStore = new SemWeb.MemoryStore(query.Select(st => Translate(st, translatedObjects)).ToArray());
-
-      return new SemWeb.Query.GraphMatch(queryStore);
-    }
-
-    private static SemWeb.Entity Translate(Entity e) {
-      return e.Uri == null ? null : new SemWeb.Entity(e.Uri);
-    }
-
-    private static 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 static Statement Translate(SemWeb.Statement statement) {
-      return Translate(statement, new Dictionary<object, object>());
-    }
-
-    private static Statement Translate(SemWeb.Statement statement, Dictionary<object, object> translatedObjects) {
-      if (!translatedObjects.ContainsKey(statement.Subject)) {
-        translatedObjects[statement.Subject] = new Entity(statement.Subject.Uri);
-      }
-      if (!translatedObjects.ContainsKey(statement.Predicate)) {
-        translatedObjects[statement.Predicate] = new Entity(statement.Predicate.Uri);
-      }
-      if (!translatedObjects.ContainsKey(statement.Object)) {
-        if (statement.Object is SemWeb.Literal) {
-          translatedObjects[statement.Object] = TranslateLiteral((SemWeb.Literal)statement.Object);
-        } else {
-          translatedObjects[statement.Object] = new Entity(((SemWeb.Entity)statement.Object).Uri);
-        }
-      }
-
-      Entity subjectEntity = (Entity)translatedObjects[statement.Subject];
-      Entity predicateEntity = (Entity)translatedObjects[statement.Predicate];
-      Resource property = (Resource)translatedObjects[statement.Object];
-
-      return new Statement(
-        subjectEntity,
-        predicateEntity,
-        property);
-    }
-
-    private static SemWeb.Statement Translate(Statement statement) {
-      return Translate(statement, new Dictionary<object, object>());
-    }
-
-    private static SemWeb.Statement Translate(Statement statement, Dictionary<object, object> translatedObjects) {
-      if (!translatedObjects.ContainsKey(statement.Subject)) {
-        translatedObjects[statement.Subject] = Translate(statement.Subject);
-      }
-      if (!translatedObjects.ContainsKey(statement.Predicate)) {
-        translatedObjects[statement.Predicate] = Translate(statement.Predicate);
-      }
-      if (!translatedObjects.ContainsKey(statement.Property)) {
-        translatedObjects[statement.Property] = Translate(statement.Property);
-      }
-
-      SemWeb.Entity subject = (SemWeb.Entity)translatedObjects[statement.Subject];
-      SemWeb.Entity predicate = (SemWeb.Entity)translatedObjects[statement.Predicate];
-      SemWeb.Resource property = (SemWeb.Resource)translatedObjects[statement.Property];
-
-      return new SemWeb.Statement(
-        subject,
-        predicate,
-        property);
-    }
-
-    private static SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
-      if (l.RawData == null) return null;
-      return new SemWeb.Literal(l.RawData, null, "serializedItem");
-    }
-
-    private static 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 static 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);
-      }
-    }
-
-    private class MyQueryResultSink : SemWeb.Query.QueryResultSink {
-
-      private List<VariableBindings> bindings = new List<VariableBindings>();
-      public ICollection<VariableBindings> Bindings {
-        get { return bindings.AsReadOnly(); }
-      }
-
-      public override bool Add(SemWeb.Query.VariableBindings result) {
-        VariableBindings varBindings = new VariableBindings();
-        foreach (SemWeb.Variable var in result.Variables) {
-          if (var.LocalName != null && result[var] != null) {
-            if (result[var] is SemWeb.Literal) {
-              varBindings.Add(var.LocalName, TranslateLiteral((SemWeb.Literal)result[var]));
-            } else {
-              varBindings.Add(var.LocalName, new Entity(((SemWeb.Entity)result[var]).Uri));
-            }
-          }
-          bindings.Add(varBindings);
-        }
-        return true;
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs	(revision 1529)
@@ -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.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public abstract class DispatcherBase : IDispatcher {
+    public enum ModelComplexity { Low, Medium, High };
+    public enum Algorithm { StandardGpRegression, OffspringGpRegression, StandardGpClassification, OffspringGpClassification, StandardGpForecasting, OffspringGpForecasting };
+
+    private IStore store;
+    private ModelComplexity[] possibleComplexities = new ModelComplexity[] { ModelComplexity.Low, ModelComplexity.Medium, ModelComplexity.High };
+    private Dictionary<LearningTask, Algorithm[]> possibleAlgorithms = new Dictionary<LearningTask, Algorithm[]>() {
+      {LearningTask.Classification, new Algorithm[] { Algorithm.StandardGpClassification, Algorithm.OffspringGpClassification }},
+      {LearningTask.Regression, new Algorithm[] { Algorithm.StandardGpRegression, Algorithm.OffspringGpRegression }},
+      {LearningTask.TimeSeries, new Algorithm[] { Algorithm.StandardGpForecasting, Algorithm.OffspringGpForecasting }}
+    };
+
+    private static int MaxGenerations {
+      get { return 3; }
+    }
+
+    private static int MaxEvaluatedSolutions {
+      get { return 3000; }
+    }
+
+    public DispatcherBase(IStore store) {
+      this.store = store;
+    }
+
+    public Execution GetNextJob() {
+      // find and select a dataset
+      var dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
+      var dataSetQuery = new Statement[] {
+        new Statement(dataSetVar, Ontology.PredicateInstanceOf, Ontology.TypeDataSet)
+      };
+
+      Entity[] datasets = store.Query("?DataSet <" + Ontology.PredicateInstanceOf.Uri + "> <" + Ontology.TypeDataSet.Uri + "> .", 0, 100)
+        .Select(x => (Entity)x.Get("DataSet"))
+        .ToArray();
+
+      // no datasets => do nothing
+      if (datasets.Length == 0) return null;
+
+      Entity dataSetEntity = SelectDataSet(datasets);
+      DataSet dataSet = new DataSet(store, dataSetEntity);
+
+      int targetVariable = SelectTargetVariable(dataSet, dataSet.Problem.AllowedTargetVariables.ToArray());
+      Algorithm selectedAlgorithm = SelectAlgorithm(dataSet, targetVariable, possibleAlgorithms[dataSet.Problem.LearningTask]);
+      string targetVariableName = dataSet.Problem.GetVariableName(targetVariable);
+      ModelComplexity selectedComplexity = SelectComplexity(dataSet, targetVariable, selectedAlgorithm, possibleComplexities);
+
+      Execution exec = CreateExecution(dataSet.Problem, targetVariable, selectedAlgorithm, selectedComplexity);
+      if (exec != null) {
+        exec.DataSetEntity = dataSetEntity;
+        exec.TargetVariable = targetVariableName;
+      }
+      return exec;
+    }
+
+    public abstract Entity SelectDataSet(Entity[] datasets);
+    public abstract int SelectTargetVariable(DataSet dataSet, int[] targetVariables);
+    public abstract Algorithm SelectAlgorithm(DataSet dataSet, int targetVariable, Algorithm[] possibleAlgorithms);
+    public abstract ModelComplexity SelectComplexity(DataSet dataSet, int targetVariable, Algorithm algorithm, ModelComplexity[] possibleComplexities);
+
+    private Execution CreateExecution(Problem problem, int targetVariable, Algorithm algorithm, ModelComplexity complexity) {
+      switch (algorithm) {
+        case Algorithm.StandardGpRegression: {
+            var algo = new HeuristicLab.GP.StructureIdentification.StandardGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.PopulationSize = 10000;
+            algo.MaxGenerations = MaxGenerations;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "StandardGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.OffspringGpRegression: {
+            var algo = new HeuristicLab.GP.StructureIdentification.OffspringSelectionGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "OffspringGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.StandardGpClassification: {
+            var algo = new HeuristicLab.GP.StructureIdentification.Classification.StandardGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.PopulationSize = 10000;
+            algo.MaxGenerations = MaxGenerations;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "StandardGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.OffspringGpClassification: {
+            var algo = new HeuristicLab.GP.StructureIdentification.Classification.OffspringSelectionGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "OffspringGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.StandardGpForecasting: {
+            var algo = new HeuristicLab.GP.StructureIdentification.TimeSeries.StandardGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.PopulationSize = 10000;
+            algo.MaxGenerations = MaxGenerations;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "StandardGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.OffspringGpForecasting: {
+            var algo = new HeuristicLab.GP.StructureIdentification.TimeSeries.OffspringSelectionGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "OffspringGP - Complexity: " + complexity;
+            return exec;
+          }
+        default: {
+            return null;
+          }
+      }
+    }
+
+    private void SetComplexityParameters(AlgorithmBase algo, ModelComplexity complexity) {
+      switch (complexity) {
+        case ModelComplexity.Low: {
+            algo.MaxTreeHeight = 5;
+            algo.MaxTreeSize = 20;
+            break;
+          }
+        case ModelComplexity.Medium: {
+            algo.MaxTreeHeight = 10;
+            algo.MaxTreeSize = 100;
+            break;
+          }
+        case ModelComplexity.High: {
+            algo.MaxTreeHeight = 12;
+            algo.MaxTreeSize = 200;
+            break;
+          }
+      }
+    }
+
+    private void SetProblemParameters(AlgorithmBase algo, Problem problem, int targetVariable) {
+      algo.ProblemInjector.GetVariable("Dataset").Value = problem.DataSet;
+      algo.ProblemInjector.GetVariable("TargetVariable").GetValue<IntData>().Data = targetVariable;
+      algo.ProblemInjector.GetVariable("TrainingSamplesStart").GetValue<IntData>().Data = problem.TrainingSamplesStart;
+      algo.ProblemInjector.GetVariable("TrainingSamplesEnd").GetValue<IntData>().Data = problem.TrainingSamplesEnd;
+      algo.ProblemInjector.GetVariable("ValidationSamplesStart").GetValue<IntData>().Data = problem.ValidationSamplesStart;
+      algo.ProblemInjector.GetVariable("ValidationSamplesEnd").GetValue<IntData>().Data = problem.ValidationSamplesEnd;
+      algo.ProblemInjector.GetVariable("TestSamplesStart").GetValue<IntData>().Data = problem.TestSamplesStart;
+      algo.ProblemInjector.GetVariable("TestSamplesEnd").GetValue<IntData>().Data = problem.TestSamplesEnd;
+      ItemList<IntData> allowedFeatures = algo.ProblemInjector.GetVariable("AllowedFeatures").GetValue<ItemList<IntData>>();
+      foreach (int allowedFeature in problem.AllowedInputVariables) allowedFeatures.Add(new IntData(allowedFeature));
+
+      if (problem.LearningTask == LearningTask.TimeSeries) {
+        algo.ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = problem.AutoRegressive;
+        algo.ProblemInjector.GetVariable("MinTimeOffset").GetValue<IntData>().Data = problem.MinTimeOffset;
+        algo.ProblemInjector.GetVariable("MaxTimeOffset").GetValue<IntData>().Data = problem.MaxTimeOffset;
+      } else if (problem.LearningTask == LearningTask.Classification) {
+        ItemList<DoubleData> classValues = algo.ProblemInjector.GetVariable("TargetClassValues").GetValue<ItemList<DoubleData>>();
+        foreach (double classValue in GetDifferentClassValues(problem.DataSet, targetVariable)) classValues.Add(new DoubleData(classValue));
+      }
+    }
+
+    private IEnumerable<double> GetDifferentClassValues(HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable) {
+      return Enumerable.Range(0, dataset.Rows).Select(x => dataset.GetValue(x, targetVariable)).Distinct();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Executer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Executer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Executer.cs	(revision 1529)
@@ -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.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Grid;
+using System.Diagnostics;
+using HeuristicLab.Core;
+using System.Threading;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class Executer {
+    private IDispatcher dispatcher;
+    private JobManager jobManager;
+    private IStore store;
+    private Dictionary<WaitHandle, Execution> activeExecutions;
+
+    private TimeSpan StartJobInterval {
+      get { return TimeSpan.FromMilliseconds(500); }
+    }
+
+    private TimeSpan WaitForFinishedJobsTimeout {
+      get { return TimeSpan.FromMilliseconds(100); }
+    }
+
+    private int maxActiveJobs;
+    public int MaxActiveJobs {
+      get { return maxActiveJobs; }
+      set {
+        if (value < 0) throw new ArgumentException("Only positive values are allowed for MaxActiveJobs");
+        maxActiveJobs = value;
+      }
+    }
+
+    public Executer(IDispatcher dispatcher, IStore store, string gridUrl) {
+      activeExecutions = new Dictionary<WaitHandle, Execution>();
+      maxActiveJobs = 10;
+      this.dispatcher = dispatcher;
+      this.store = store;
+      this.jobManager = new JobManager(gridUrl);
+      jobManager.Reset();
+    }
+
+    internal void Start() {
+      new Thread(StartJobs).Start();
+    }
+
+    private void StartJobs() {
+      List<WaitHandle> wh = new List<WaitHandle>();
+      Dictionary<WaitHandle, AtomicOperation> activeOperations = new Dictionary<WaitHandle, AtomicOperation>();
+      while (true) {
+        try {
+          // start new jobs as long as there are less than MaxActiveJobs 
+          while (wh.Count < MaxActiveJobs) {
+            Thread.Sleep(StartJobInterval);
+            // get an execution from the dispatcher and execute in grid via job-manager
+            Execution execution = dispatcher.GetNextJob();
+            if (execution != null) {
+              AtomicOperation op = new AtomicOperation(execution.Engine.OperatorGraph.InitialOperator, execution.Engine.GlobalScope);
+              WaitHandle opWh = jobManager.BeginExecuteOperation(execution.Engine.GlobalScope, op);
+              wh.Add(opWh);
+              activeOperations.Add(opWh, op);
+              lock (activeExecutions) {
+                activeExecutions.Add(opWh, execution);
+              }
+            }
+          }
+          // wait until any job is finished
+          WaitHandle[] whArr = wh.ToArray();
+          int readyHandleIndex = WaitHandle.WaitAny(whArr, WaitForFinishedJobsTimeout);
+          if (readyHandleIndex != WaitHandle.WaitTimeout) {
+            WaitHandle readyHandle = whArr[readyHandleIndex];
+            AtomicOperation finishedOp = activeOperations[readyHandle];
+            wh.Remove(readyHandle);
+            Execution finishedExecution = null;
+            lock (activeExecutions) {
+              finishedExecution = activeExecutions[readyHandle];
+              activeExecutions.Remove(readyHandle);
+            }
+            activeOperations.Remove(readyHandle);
+            ProcessingEngine finishedEngine = null;
+            try {
+              finishedEngine = jobManager.EndExecuteOperation(finishedOp);
+            }
+            catch (Exception badEx) {
+              Trace.WriteLine("CEDMA Executer: Exception in job execution thread. " + badEx.Message);
+            }
+            if (finishedEngine != null) {
+              StoreResults(finishedExecution, finishedEngine);
+            }
+          }
+        }
+        catch (Exception ex) {
+          Trace.WriteLine("CEDMA Executer: Exception in job-management thread. " + ex.Message);
+        }
+      }
+    }
+
+    private void StoreResults(Execution finishedExecution, ProcessingEngine finishedEngine) {
+      Entity model = new Entity(Ontology.CedmaNameSpace + Guid.NewGuid());
+      store.Add(new Statement(model, Ontology.PredicateInstanceOf, Ontology.TypeGeneticProgrammingFunctionTree));
+      store.Add(new Statement(finishedExecution.DataSetEntity, Ontology.PredicateHasModel, model));
+      StoreModelAttribute(model, Ontology.TargetVariable, finishedExecution.TargetVariable);
+      StoreModelAttribute(model, Ontology.AlgorithmName, finishedExecution.Description);
+      Scope bestModelScope = finishedEngine.GlobalScope.GetVariableValue<Scope>("BestValidationSolution", false);
+      StoreModelVariable(model, Ontology.TrainingMeanSquaredError, bestModelScope, "Quality");
+      StoreModelVariable(model, Ontology.ValidationMeanSquaredError, bestModelScope, "ValidationQuality");
+      StoreModelVariable(model, Ontology.TestMeanSquaredError, bestModelScope, "TestQuality");
+      StoreModelVariable(model, Ontology.TrainingMeanAbsolutePercentageError, bestModelScope, "TrainingMAPE");
+      StoreModelVariable(model, Ontology.ValidationMeanAbsolutePercentageError, bestModelScope, "ValidationMAPE");
+      StoreModelVariable(model, Ontology.TestMeanAbsolutePercentageError, bestModelScope, "TestMAPE");
+      StoreModelVariable(model, Ontology.TrainingMeanAbsolutePercentageOfRangeError, bestModelScope, "TrainingMAPRE");
+      StoreModelVariable(model, Ontology.ValidationMeanAbsolutePercentageOfRangeError, bestModelScope, "ValidationMAPRE");
+      StoreModelVariable(model, Ontology.TestMeanAbsolutePercentageOfRangeError, bestModelScope, "TestMAPRE");
+      StoreModelVariable(model, Ontology.TrainingCoefficientOfDetermination, bestModelScope, "TrainingR2");
+      StoreModelVariable(model, Ontology.ValidationCoefficientOfDetermination, bestModelScope, "ValidationR2");
+      StoreModelVariable(model, Ontology.TestCoefficientOfDetermination, bestModelScope, "TestR2");
+      StoreModelVariable(model, Ontology.TrainingTheilsInequalityCoefficient, bestModelScope, "TrainingTheilInequalityCoefficient");
+      StoreModelVariable(model, Ontology.ValidationTheilsInequalityCoefficient, bestModelScope, "ValidationTheilInequalityCoefficient");
+      StoreModelVariable(model, Ontology.TestTheilsInequalityCoefficient, bestModelScope, "TestTheilInequalityCoefficient");
+      StoreModelVariable(model, Ontology.TrainingAccuracy, bestModelScope, "TrainingAccuracy");
+      StoreModelVariable(model, Ontology.ValidationAccuracy, bestModelScope, "ValidationAccuracy");
+      StoreModelVariable(model, Ontology.TestAccuracy, bestModelScope, "TestAccuracy");
+      StoreModelVariable(model, Ontology.TreeSize, bestModelScope, "TreeSize");
+      StoreModelVariable(model, Ontology.TreeHeight, bestModelScope, "TreeHeight");
+      StoreModelVariable(model, Ontology.EvaluatedSolutions, bestModelScope, "EvaluatedSolutions");
+
+      byte[] serializedModel = PersistenceManager.SaveToGZip(bestModelScope.GetVariableValue("FunctionTree", false));
+      store.Add(new Statement(model, Ontology.PredicateSerializedData, new Literal(Convert.ToBase64String(serializedModel))));
+    }
+
+    private void StoreModelVariable(Entity model, Entity entity, Scope scope, string variableName) {
+      if (scope.GetVariable(variableName) != null)
+        StoreModelAttribute(model, entity, scope.GetVariableValue<ObjectData>(variableName, false).Data);
+    }
+
+    private void StoreModelAttribute(Entity model, Entity predicate, object value) {
+      store.Add(new Statement(model, predicate, new Literal(value)));
+    }
+
+    internal string[] GetJobs() {
+      lock (activeExecutions) {
+        string[] retVal = new string[activeExecutions.Count];
+        int i = 0;
+        foreach (Execution e in activeExecutions.Values) {
+          retVal[i++] = "Target-Variable: " + e.TargetVariable + " " + e.Description;
+        }
+        return retVal;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Execution.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Execution.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Execution.cs	(revision 1529)
@@ -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.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Grid;
+using System.Diagnostics;
+using HeuristicLab.Core;
+using System.Threading;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class Execution {
+    private Entity dataSetEntity;
+    public Entity DataSetEntity {
+      get { return dataSetEntity; }
+      set { dataSetEntity = value; }
+    }
+
+    private IEngine engine;
+    public IEngine Engine {
+      get { return engine; }
+      set { engine = value; }
+    }
+
+    private string targetVariable;
+    public string TargetVariable {
+      get { return targetVariable; }
+      set { targetVariable = value; }
+    }
+
+    private string description;
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    public Execution(IEngine engine) {
+      this.engine = engine;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/HeuristicLab.CEDMA.Server.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/HeuristicLab.CEDMA.Server.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/HeuristicLab.CEDMA.Server.csproj	(revision 1529)
@@ -0,0 +1,184 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="DispatcherBase.cs" />
+    <Compile Include="IDispatcher.cs" />
+    <Compile Include="Execution.cs" />
+    <Compile Include="Executer.cs" />
+    <Compile Include="RandomDispatcher.cs" />
+    <Compile Include="Server.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.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.Classification\HeuristicLab.GP.StructureIdentification.Classification.csproj">
+      <Project>{7C20D100-8BEB-433A-9499-F075E2CB9297}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification.Classification</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification.TimeSeries\HeuristicLab.GP.StructureIdentification.TimeSeries.csproj">
+      <Project>{6084CFB5-733F-449D-9F92-2E40D13F0514}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification.TimeSeries</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.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: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/HeuristicLabCedmaServerPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/HeuristicLabCedmaServerPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/HeuristicLabCedmaServerPlugin.cs	(revision 1529)
@@ -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.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Server {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Server-3.3")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Server-3.3.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Grid-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification.Classification-3.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.3")]
+  public class HeuristicLabCedmaServerPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/IDispatcher.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/IDispatcher.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/IDispatcher.cs	(revision 1529)
@@ -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;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public interface IDispatcher {
+    Execution GetNextJob();
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/RandomDispatcher.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/RandomDispatcher.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/RandomDispatcher.cs	(revision 1529)
@@ -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.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class RandomDispatcher : DispatcherBase {
+    private Random random;
+    public RandomDispatcher(IStore store)
+      : base(store) {
+      random = new Random();
+    }
+
+    public override Algorithm SelectAlgorithm(DataSet dataSet, int targetVariable, Algorithm[] possibleAlgorithms) {
+      return possibleAlgorithms[random.Next(possibleAlgorithms.Length)];
+    }
+
+    public override ModelComplexity SelectComplexity(DataSet dataSet, int targetVariable, Algorithm algorithm, ModelComplexity[] possibleComplexities) {
+      return possibleComplexities[random.Next(possibleComplexities.Length)];
+    }
+
+    public override Entity SelectDataSet(Entity[] datasets) {
+      return datasets[random.Next(datasets.Length)];
+    }
+
+    public override int SelectTargetVariable(DataSet dataSet, int[] targetVariables) {
+      return targetVariables[random.Next(targetVariables.Length)];
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Server.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Server.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/Server.cs	(revision 1529)
@@ -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.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class Server {
+    private ServiceHost host;
+    private IStore store;
+
+    private string gridServiceUrl;
+
+    public string GridServiceUrl {
+      get { return gridServiceUrl; }
+      set { gridServiceUrl = value; }
+    }
+
+    private string cedmaServiceUrl;
+
+    public string CedmaServiceUrl {
+      get { return cedmaServiceUrl; }
+      set { cedmaServiceUrl = value; }
+    }
+
+    public Server(IStore store) {
+      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;
+      }
+      cedmaServiceUrl = "net.tcp://" + addresses[index] + ":8002/CEDMA";
+      this.store = store;
+    }
+
+    public void Start() {
+      host = new ServiceHost(store, new Uri(cedmaServiceUrl));
+      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
+      throttlingBehavior.MaxConcurrentSessions = 20;
+      host.Description.Behaviors.Add(throttlingBehavior);
+      try {
+        NetTcpBinding binding = new NetTcpBinding();
+        binding.SendTimeout = new TimeSpan(10, 0, 0);
+        binding.MaxReceivedMessageSize = int.MaxValue;
+        binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
+        binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
+        host.AddServiceEndpoint(typeof(IStore), binding, cedmaServiceUrl);
+        host.Open();
+      }
+      catch (CommunicationException ex) {
+        MessageBox.Show("An exception occurred: " + ex.Message);
+        host.Abort();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerApplication.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerApplication.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.cs	(revision 1529)
@@ -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.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 Server server;
+    private Store store;
+    private IDispatcher dispatcher;
+    private Executer executer;
+
+    private static readonly string rdfFile = AppDomain.CurrentDomain.BaseDirectory + "rdf_store.db3";
+    private static readonly string rdfConnectionString = "sqlite:rdf:Data Source=\"" + rdfFile + "\"";
+
+    public ServerForm() {
+      InitializeComponent();
+      store = new Store(rdfConnectionString);
+      server = new Server(store);
+      server.Start();
+      addressTextBox.Text = server.CedmaServiceUrl;
+    }
+
+    private void refreshTimer_Tick(object sender, EventArgs e) {
+      listBox.DataSource = executer.GetJobs();
+    }
+
+    private void connectButton_Click(object sender, EventArgs e) {
+      dispatcher = new RandomDispatcher(store);
+      executer = new Executer(dispatcher, store, gridAddress.Text);
+      executer.Start();
+      maxActiveJobsUpDown.Enabled = true;
+      maxActiveJobsUpDown.Value = executer.MaxActiveJobs;
+      connectButton.Enabled = false;
+      refreshTimer.Start();
+    }
+
+    private void maxActiveJobsUpDown_ValueChanged(object sender, EventArgs e) {
+      executer.MaxActiveJobs = Convert.ToInt32(maxActiveJobsUpDown.Value);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.designer.cs	(revision 1529)
@@ -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
+
+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.components = new System.ComponentModel.Container();
+      this.addressTextBox = new System.Windows.Forms.TextBox();
+      this.externalAddressLabel = new System.Windows.Forms.Label();
+      this.gridAddressLabel = new System.Windows.Forms.Label();
+      this.gridAddress = new System.Windows.Forms.TextBox();
+      this.connectButton = new System.Windows.Forms.Button();
+      this.listBox = new System.Windows.Forms.ListBox();
+      this.refreshTimer = new System.Windows.Forms.Timer(this.components);
+      this.maxActiveJobsUpDown = new System.Windows.Forms.NumericUpDown();
+      this.label1 = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.maxActiveJobsUpDown)).BeginInit();
+      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:";
+      // 
+      // 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(160, 20);
+      this.gridAddress.TabIndex = 8;
+      // 
+      // connectButton
+      // 
+      this.connectButton.Location = new System.Drawing.Point(272, 30);
+      this.connectButton.Name = "connectButton";
+      this.connectButton.Size = new System.Drawing.Size(75, 23);
+      this.connectButton.TabIndex = 10;
+      this.connectButton.Text = "Connect";
+      this.connectButton.UseVisualStyleBackColor = true;
+      this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
+      // 
+      // listBox
+      // 
+      this.listBox.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.listBox.FormattingEnabled = true;
+      this.listBox.Location = new System.Drawing.Point(12, 84);
+      this.listBox.Name = "listBox";
+      this.listBox.Size = new System.Drawing.Size(350, 251);
+      this.listBox.TabIndex = 11;
+      // 
+      // refreshTimer
+      // 
+      this.refreshTimer.Interval = 1000;
+      this.refreshTimer.Tick += new System.EventHandler(this.refreshTimer_Tick);
+      // 
+      // maxActiveJobsUpDown
+      // 
+      this.maxActiveJobsUpDown.Enabled = false;
+      this.maxActiveJobsUpDown.Location = new System.Drawing.Point(106, 59);
+      this.maxActiveJobsUpDown.Maximum = new decimal(new int[] {
+            64,
+            0,
+            0,
+            0});
+      this.maxActiveJobsUpDown.Name = "maxActiveJobsUpDown";
+      this.maxActiveJobsUpDown.Size = new System.Drawing.Size(120, 20);
+      this.maxActiveJobsUpDown.TabIndex = 12;
+      this.maxActiveJobsUpDown.ValueChanged += new System.EventHandler(this.maxActiveJobsUpDown_ValueChanged);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Enabled = false;
+      this.label1.Location = new System.Drawing.Point(12, 61);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(84, 13);
+      this.label1.TabIndex = 13;
+      this.label1.Text = "&Max active jobs:";
+      // 
+      // ServerForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(374, 342);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.maxActiveJobsUpDown);
+      this.Controls.Add(this.listBox);
+      this.Controls.Add(this.connectButton);
+      this.Controls.Add(this.gridAddressLabel);
+      this.Controls.Add(this.gridAddress);
+      this.Controls.Add(this.externalAddressLabel);
+      this.Controls.Add(this.addressTextBox);
+      this.Name = "ServerForm";
+      this.Text = "CEDMA Server";
+      ((System.ComponentModel.ISupportInitialize)(this.maxActiveJobsUpDown)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox addressTextBox;
+    private System.Windows.Forms.Label externalAddressLabel;
+    private System.Windows.Forms.Label gridAddressLabel;
+    private System.Windows.Forms.TextBox gridAddress;
+    private System.Windows.Forms.Button connectButton;
+    private System.Windows.Forms.ListBox listBox;
+    private System.Windows.Forms.Timer refreshTimer;
+    private System.Windows.Forms.NumericUpDown maxActiveJobsUpDown;
+    private System.Windows.Forms.Label label1;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ServerForm.resx	(revision 1529)
@@ -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="refreshTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: unk/sources/HeuristicLab.CEDMA.Server/DispatcherBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/DispatcherBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,209 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Net;
-using System.ServiceModel;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.DB;
-using System.ServiceModel.Description;
-using System.Linq;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.CEDMA.Server {
-  public abstract class DispatcherBase : IDispatcher {
-    public enum ModelComplexity { Low, Medium, High };
-    public enum Algorithm { StandardGpRegression, OffspringGpRegression, StandardGpClassification, OffspringGpClassification, StandardGpForecasting, OffspringGpForecasting };
-
-    private IStore store;
-    private ModelComplexity[] possibleComplexities = new ModelComplexity[] { ModelComplexity.Low, ModelComplexity.Medium, ModelComplexity.High };
-    private Dictionary<LearningTask, Algorithm[]> possibleAlgorithms = new Dictionary<LearningTask, Algorithm[]>() {
-      {LearningTask.Classification, new Algorithm[] { Algorithm.StandardGpClassification, Algorithm.OffspringGpClassification }},
-      {LearningTask.Regression, new Algorithm[] { Algorithm.StandardGpRegression, Algorithm.OffspringGpRegression }},
-      {LearningTask.TimeSeries, new Algorithm[] { Algorithm.StandardGpForecasting, Algorithm.OffspringGpForecasting }}
-    };
-
-    private static int MaxGenerations {
-      get { return 3; }
-    }
-
-    private static int MaxEvaluatedSolutions {
-      get { return 3000; }
-    }
-
-    public DispatcherBase(IStore store) {
-      this.store = store;
-    }
-
-    public Execution GetNextJob() {
-      // find and select a dataset
-      var dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
-      var dataSetQuery = new Statement[] {
-        new Statement(dataSetVar, Ontology.PredicateInstanceOf, Ontology.TypeDataSet)
-      };
-
-      Entity[] datasets = store.Query("?DataSet <" + Ontology.PredicateInstanceOf.Uri + "> <" + Ontology.TypeDataSet.Uri + "> .", 0, 100)
-        .Select(x => (Entity)x.Get("DataSet"))
-        .ToArray();
-
-      // no datasets => do nothing
-      if (datasets.Length == 0) return null;
-
-      Entity dataSetEntity = SelectDataSet(datasets);
-      DataSet dataSet = new DataSet(store, dataSetEntity);
-
-      int targetVariable = SelectTargetVariable(dataSet, dataSet.Problem.AllowedTargetVariables.ToArray());
-      Algorithm selectedAlgorithm = SelectAlgorithm(dataSet, targetVariable, possibleAlgorithms[dataSet.Problem.LearningTask]);
-      string targetVariableName = dataSet.Problem.GetVariableName(targetVariable);
-      ModelComplexity selectedComplexity = SelectComplexity(dataSet, targetVariable, selectedAlgorithm, possibleComplexities);
-
-      Execution exec = CreateExecution(dataSet.Problem, targetVariable, selectedAlgorithm, selectedComplexity);
-      if (exec != null) {
-        exec.DataSetEntity = dataSetEntity;
-        exec.TargetVariable = targetVariableName;
-      }
-      return exec;
-    }
-
-    public abstract Entity SelectDataSet(Entity[] datasets);
-    public abstract int SelectTargetVariable(DataSet dataSet, int[] targetVariables);
-    public abstract Algorithm SelectAlgorithm(DataSet dataSet, int targetVariable, Algorithm[] possibleAlgorithms);
-    public abstract ModelComplexity SelectComplexity(DataSet dataSet, int targetVariable, Algorithm algorithm, ModelComplexity[] possibleComplexities);
-
-    private Execution CreateExecution(Problem problem, int targetVariable, Algorithm algorithm, ModelComplexity complexity) {
-      switch (algorithm) {
-        case Algorithm.StandardGpRegression: {
-            var algo = new HeuristicLab.GP.StructureIdentification.StandardGP();
-            SetComplexityParameters(algo, complexity);
-            SetProblemParameters(algo, problem, targetVariable);
-            algo.PopulationSize = 10000;
-            algo.MaxGenerations = MaxGenerations;
-            Execution exec = new Execution(algo.Engine);
-            exec.Description = "StandardGP - Complexity: " + complexity;
-            return exec;
-          }
-        case Algorithm.OffspringGpRegression: {
-            var algo = new HeuristicLab.GP.StructureIdentification.OffspringSelectionGP();
-            SetComplexityParameters(algo, complexity);
-            SetProblemParameters(algo, problem, targetVariable);
-            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
-            Execution exec = new Execution(algo.Engine);
-            exec.Description = "OffspringGP - Complexity: " + complexity;
-            return exec;
-          }
-        case Algorithm.StandardGpClassification: {
-            var algo = new HeuristicLab.GP.StructureIdentification.Classification.StandardGP();
-            SetComplexityParameters(algo, complexity);
-            SetProblemParameters(algo, problem, targetVariable);
-            algo.PopulationSize = 10000;
-            algo.MaxGenerations = MaxGenerations;
-            Execution exec = new Execution(algo.Engine);
-            exec.Description = "StandardGP - Complexity: " + complexity;
-            return exec;
-          }
-        case Algorithm.OffspringGpClassification: {
-            var algo = new HeuristicLab.GP.StructureIdentification.Classification.OffspringSelectionGP();
-            SetComplexityParameters(algo, complexity);
-            SetProblemParameters(algo, problem, targetVariable);
-            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
-            Execution exec = new Execution(algo.Engine);
-            exec.Description = "OffspringGP - Complexity: " + complexity;
-            return exec;
-          }
-        case Algorithm.StandardGpForecasting: {
-            var algo = new HeuristicLab.GP.StructureIdentification.TimeSeries.StandardGP();
-            SetComplexityParameters(algo, complexity);
-            SetProblemParameters(algo, problem, targetVariable);
-            algo.PopulationSize = 10000;
-            algo.MaxGenerations = MaxGenerations;
-            Execution exec = new Execution(algo.Engine);
-            exec.Description = "StandardGP - Complexity: " + complexity;
-            return exec;
-          }
-        case Algorithm.OffspringGpForecasting: {
-            var algo = new HeuristicLab.GP.StructureIdentification.TimeSeries.OffspringSelectionGP();
-            SetComplexityParameters(algo, complexity);
-            SetProblemParameters(algo, problem, targetVariable);
-            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
-            Execution exec = new Execution(algo.Engine);
-            exec.Description = "OffspringGP - Complexity: " + complexity;
-            return exec;
-          }
-        default: {
-            return null;
-          }
-      }
-    }
-
-    private void SetComplexityParameters(AlgorithmBase algo, ModelComplexity complexity) {
-      switch (complexity) {
-        case ModelComplexity.Low: {
-            algo.MaxTreeHeight = 5;
-            algo.MaxTreeSize = 20;
-            break;
-          }
-        case ModelComplexity.Medium: {
-            algo.MaxTreeHeight = 10;
-            algo.MaxTreeSize = 100;
-            break;
-          }
-        case ModelComplexity.High: {
-            algo.MaxTreeHeight = 12;
-            algo.MaxTreeSize = 200;
-            break;
-          }
-      }
-    }
-
-    private void SetProblemParameters(AlgorithmBase algo, Problem problem, int targetVariable) {
-      algo.ProblemInjector.GetVariable("Dataset").Value = problem.DataSet;
-      algo.ProblemInjector.GetVariable("TargetVariable").GetValue<IntData>().Data = targetVariable;
-      algo.ProblemInjector.GetVariable("TrainingSamplesStart").GetValue<IntData>().Data = problem.TrainingSamplesStart;
-      algo.ProblemInjector.GetVariable("TrainingSamplesEnd").GetValue<IntData>().Data = problem.TrainingSamplesEnd;
-      algo.ProblemInjector.GetVariable("ValidationSamplesStart").GetValue<IntData>().Data = problem.ValidationSamplesStart;
-      algo.ProblemInjector.GetVariable("ValidationSamplesEnd").GetValue<IntData>().Data = problem.ValidationSamplesEnd;
-      algo.ProblemInjector.GetVariable("TestSamplesStart").GetValue<IntData>().Data = problem.TestSamplesStart;
-      algo.ProblemInjector.GetVariable("TestSamplesEnd").GetValue<IntData>().Data = problem.TestSamplesEnd;
-      ItemList<IntData> allowedFeatures = algo.ProblemInjector.GetVariable("AllowedFeatures").GetValue<ItemList<IntData>>();
-      foreach (int allowedFeature in problem.AllowedInputVariables) allowedFeatures.Add(new IntData(allowedFeature));
-
-      if (problem.LearningTask == LearningTask.TimeSeries) {
-        algo.ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = problem.AutoRegressive;
-        algo.ProblemInjector.GetVariable("MinTimeOffset").GetValue<IntData>().Data = problem.MinTimeOffset;
-        algo.ProblemInjector.GetVariable("MaxTimeOffset").GetValue<IntData>().Data = problem.MaxTimeOffset;
-      } else if (problem.LearningTask == LearningTask.Classification) {
-        ItemList<DoubleData> classValues = algo.ProblemInjector.GetVariable("TargetClassValues").GetValue<ItemList<DoubleData>>();
-        foreach (double classValue in GetDifferentClassValues(problem.DataSet, targetVariable)) classValues.Add(new DoubleData(classValue));
-      }
-    }
-
-    private IEnumerable<double> GetDifferentClassValues(HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable) {
-      return Enumerable.Range(0, dataset.Rows).Select(x => dataset.GetValue(x, targetVariable)).Distinct();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/Executer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/Executer.cs	(revision 1528)
+++ 	(revision )
@@ -1,182 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Net;
-using System.ServiceModel;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.DB;
-using System.ServiceModel.Description;
-using System.Linq;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.Data;
-using HeuristicLab.Grid;
-using System.Diagnostics;
-using HeuristicLab.Core;
-using System.Threading;
-
-namespace HeuristicLab.CEDMA.Server {
-  public class Executer {
-    private IDispatcher dispatcher;
-    private JobManager jobManager;
-    private IStore store;
-    private Dictionary<WaitHandle, Execution> activeExecutions;
-
-    private TimeSpan StartJobInterval {
-      get { return TimeSpan.FromMilliseconds(500); }
-    }
-
-    private TimeSpan WaitForFinishedJobsTimeout {
-      get { return TimeSpan.FromMilliseconds(100); }
-    }
-
-    private int maxActiveJobs;
-    public int MaxActiveJobs {
-      get { return maxActiveJobs; }
-      set {
-        if (value < 0) throw new ArgumentException("Only positive values are allowed for MaxActiveJobs");
-        maxActiveJobs = value;
-      }
-    }
-
-    public Executer(IDispatcher dispatcher, IStore store, string gridUrl) {
-      activeExecutions = new Dictionary<WaitHandle, Execution>();
-      maxActiveJobs = 10;
-      this.dispatcher = dispatcher;
-      this.store = store;
-      this.jobManager = new JobManager(gridUrl);
-      jobManager.Reset();
-    }
-
-    internal void Start() {
-      new Thread(StartJobs).Start();
-    }
-
-    private void StartJobs() {
-      List<WaitHandle> wh = new List<WaitHandle>();
-      Dictionary<WaitHandle, AtomicOperation> activeOperations = new Dictionary<WaitHandle, AtomicOperation>();
-      while (true) {
-        try {
-          // start new jobs as long as there are less than MaxActiveJobs 
-          while (wh.Count < MaxActiveJobs) {
-            Thread.Sleep(StartJobInterval);
-            // get an execution from the dispatcher and execute in grid via job-manager
-            Execution execution = dispatcher.GetNextJob();
-            if (execution != null) {
-              AtomicOperation op = new AtomicOperation(execution.Engine.OperatorGraph.InitialOperator, execution.Engine.GlobalScope);
-              WaitHandle opWh = jobManager.BeginExecuteOperation(execution.Engine.GlobalScope, op);
-              wh.Add(opWh);
-              activeOperations.Add(opWh, op);
-              lock (activeExecutions) {
-                activeExecutions.Add(opWh, execution);
-              }
-            }
-          }
-          // wait until any job is finished
-          WaitHandle[] whArr = wh.ToArray();
-          int readyHandleIndex = WaitHandle.WaitAny(whArr, WaitForFinishedJobsTimeout);
-          if (readyHandleIndex != WaitHandle.WaitTimeout) {
-            WaitHandle readyHandle = whArr[readyHandleIndex];
-            AtomicOperation finishedOp = activeOperations[readyHandle];
-            wh.Remove(readyHandle);
-            Execution finishedExecution = null;
-            lock (activeExecutions) {
-              finishedExecution = activeExecutions[readyHandle];
-              activeExecutions.Remove(readyHandle);
-            }
-            activeOperations.Remove(readyHandle);
-            ProcessingEngine finishedEngine = null;
-            try {
-              finishedEngine = jobManager.EndExecuteOperation(finishedOp);
-            }
-            catch (Exception badEx) {
-              Trace.WriteLine("CEDMA Executer: Exception in job execution thread. " + badEx.Message);
-            }
-            if (finishedEngine != null) {
-              StoreResults(finishedExecution, finishedEngine);
-            }
-          }
-        }
-        catch (Exception ex) {
-          Trace.WriteLine("CEDMA Executer: Exception in job-management thread. " + ex.Message);
-        }
-      }
-    }
-
-    private void StoreResults(Execution finishedExecution, ProcessingEngine finishedEngine) {
-      Entity model = new Entity(Ontology.CedmaNameSpace + Guid.NewGuid());
-      store.Add(new Statement(model, Ontology.PredicateInstanceOf, Ontology.TypeGeneticProgrammingFunctionTree));
-      store.Add(new Statement(finishedExecution.DataSetEntity, Ontology.PredicateHasModel, model));
-      StoreModelAttribute(model, Ontology.TargetVariable, finishedExecution.TargetVariable);
-      StoreModelAttribute(model, Ontology.AlgorithmName, finishedExecution.Description);
-      Scope bestModelScope = finishedEngine.GlobalScope.GetVariableValue<Scope>("BestValidationSolution", false);
-      StoreModelVariable(model, Ontology.TrainingMeanSquaredError, bestModelScope, "Quality");
-      StoreModelVariable(model, Ontology.ValidationMeanSquaredError, bestModelScope, "ValidationQuality");
-      StoreModelVariable(model, Ontology.TestMeanSquaredError, bestModelScope, "TestQuality");
-      StoreModelVariable(model, Ontology.TrainingMeanAbsolutePercentageError, bestModelScope, "TrainingMAPE");
-      StoreModelVariable(model, Ontology.ValidationMeanAbsolutePercentageError, bestModelScope, "ValidationMAPE");
-      StoreModelVariable(model, Ontology.TestMeanAbsolutePercentageError, bestModelScope, "TestMAPE");
-      StoreModelVariable(model, Ontology.TrainingMeanAbsolutePercentageOfRangeError, bestModelScope, "TrainingMAPRE");
-      StoreModelVariable(model, Ontology.ValidationMeanAbsolutePercentageOfRangeError, bestModelScope, "ValidationMAPRE");
-      StoreModelVariable(model, Ontology.TestMeanAbsolutePercentageOfRangeError, bestModelScope, "TestMAPRE");
-      StoreModelVariable(model, Ontology.TrainingCoefficientOfDetermination, bestModelScope, "TrainingR2");
-      StoreModelVariable(model, Ontology.ValidationCoefficientOfDetermination, bestModelScope, "ValidationR2");
-      StoreModelVariable(model, Ontology.TestCoefficientOfDetermination, bestModelScope, "TestR2");
-      StoreModelVariable(model, Ontology.TrainingTheilsInequalityCoefficient, bestModelScope, "TrainingTheilInequalityCoefficient");
-      StoreModelVariable(model, Ontology.ValidationTheilsInequalityCoefficient, bestModelScope, "ValidationTheilInequalityCoefficient");
-      StoreModelVariable(model, Ontology.TestTheilsInequalityCoefficient, bestModelScope, "TestTheilInequalityCoefficient");
-      StoreModelVariable(model, Ontology.TrainingAccuracy, bestModelScope, "TrainingAccuracy");
-      StoreModelVariable(model, Ontology.ValidationAccuracy, bestModelScope, "ValidationAccuracy");
-      StoreModelVariable(model, Ontology.TestAccuracy, bestModelScope, "TestAccuracy");
-      StoreModelVariable(model, Ontology.TreeSize, bestModelScope, "TreeSize");
-      StoreModelVariable(model, Ontology.TreeHeight, bestModelScope, "TreeHeight");
-      StoreModelVariable(model, Ontology.EvaluatedSolutions, bestModelScope, "EvaluatedSolutions");
-
-      byte[] serializedModel = PersistenceManager.SaveToGZip(bestModelScope.GetVariableValue("FunctionTree", false));
-      store.Add(new Statement(model, Ontology.PredicateSerializedData, new Literal(Convert.ToBase64String(serializedModel))));
-    }
-
-    private void StoreModelVariable(Entity model, Entity entity, Scope scope, string variableName) {
-      if (scope.GetVariable(variableName) != null)
-        StoreModelAttribute(model, entity, scope.GetVariableValue<ObjectData>(variableName, false).Data);
-    }
-
-    private void StoreModelAttribute(Entity model, Entity predicate, object value) {
-      store.Add(new Statement(model, predicate, new Literal(value)));
-    }
-
-    internal string[] GetJobs() {
-      lock (activeExecutions) {
-        string[] retVal = new string[activeExecutions.Count];
-        int i = 0;
-        foreach (Execution e in activeExecutions.Values) {
-          retVal[i++] = "Target-Variable: " + e.TargetVariable + " " + e.Description;
-        }
-        return retVal;
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/Execution.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/Execution.cs	(revision 1528)
+++ 	(revision )
@@ -1,71 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Net;
-using System.ServiceModel;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.DB;
-using System.ServiceModel.Description;
-using System.Linq;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.Data;
-using HeuristicLab.Grid;
-using System.Diagnostics;
-using HeuristicLab.Core;
-using System.Threading;
-
-namespace HeuristicLab.CEDMA.Server {
-  public class Execution {
-    private Entity dataSetEntity;
-    public Entity DataSetEntity {
-      get { return dataSetEntity; }
-      set { dataSetEntity = value; }
-    }
-
-    private IEngine engine;
-    public IEngine Engine {
-      get { return engine; }
-      set { engine = value; }
-    }
-
-    private string targetVariable;
-    public string TargetVariable {
-      get { return targetVariable; }
-      set { targetVariable = value; }
-    }
-
-    private string description;
-    public string Description {
-      get { return description; }
-      set { description = value; }
-    }
-
-    public Execution(IEngine engine) {
-      this.engine = engine;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 1528)
+++ 	(revision )
@@ -1,184 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="DispatcherBase.cs" />
-    <Compile Include="IDispatcher.cs" />
-    <Compile Include="Execution.cs" />
-    <Compile Include="Executer.cs" />
-    <Compile Include="RandomDispatcher.cs" />
-    <Compile Include="Server.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.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.Classification\HeuristicLab.GP.StructureIdentification.Classification.csproj">
-      <Project>{7C20D100-8BEB-433A-9499-F075E2CB9297}</Project>
-      <Name>HeuristicLab.GP.StructureIdentification.Classification</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification.TimeSeries\HeuristicLab.GP.StructureIdentification.TimeSeries.csproj">
-      <Project>{6084CFB5-733F-449D-9F92-2E40D13F0514}</Project>
-      <Name>HeuristicLab.GP.StructureIdentification.TimeSeries</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.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: unk/sources/HeuristicLab.CEDMA.Server/HeuristicLabCedmaServerPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLabCedmaServerPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.CEDMA.Server-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.3")]
-  [Dependency(Dependency = "HeuristicLab.CEDMA.DB-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Grid-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
-  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
-  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
-  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification.Classification-3.3")]
-  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.3")]
-  public class HeuristicLabCedmaServerPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/IDispatcher.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/IDispatcher.cs	(revision 1528)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Net;
-using System.ServiceModel;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.DB;
-using System.ServiceModel.Description;
-using System.Linq;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.CEDMA.Server {
-  public interface IDispatcher {
-    Execution GetNextJob();
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/RandomDispatcher.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/RandomDispatcher.cs	(revision 1528)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Net;
-using System.ServiceModel;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.DB;
-using System.ServiceModel.Description;
-using System.Linq;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.CEDMA.Server {
-  public class RandomDispatcher : DispatcherBase {
-    private Random random;
-    public RandomDispatcher(IStore store)
-      : base(store) {
-      random = new Random();
-    }
-
-    public override Algorithm SelectAlgorithm(DataSet dataSet, int targetVariable, Algorithm[] possibleAlgorithms) {
-      return possibleAlgorithms[random.Next(possibleAlgorithms.Length)];
-    }
-
-    public override ModelComplexity SelectComplexity(DataSet dataSet, int targetVariable, Algorithm algorithm, ModelComplexity[] possibleComplexities) {
-      return possibleComplexities[random.Next(possibleComplexities.Length)];
-    }
-
-    public override Entity SelectDataSet(Entity[] datasets) {
-      return datasets[random.Next(datasets.Length)];
-    }
-
-    public override int SelectTargetVariable(DataSet dataSet, int[] targetVariables) {
-      return targetVariables[random.Next(targetVariables.Length)];
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/Server.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/Server.cs	(revision 1528)
+++ 	(revision )
@@ -1,86 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Net;
-using System.ServiceModel;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.DB;
-using System.ServiceModel.Description;
-
-namespace HeuristicLab.CEDMA.Server {
-  public class Server {
-    private ServiceHost host;
-    private IStore store;
-
-    private string gridServiceUrl;
-
-    public string GridServiceUrl {
-      get { return gridServiceUrl; }
-      set { gridServiceUrl = value; }
-    }
-
-    private string cedmaServiceUrl;
-
-    public string CedmaServiceUrl {
-      get { return cedmaServiceUrl; }
-      set { cedmaServiceUrl = value; }
-    }
-
-    public Server(IStore store) {
-      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;
-      }
-      cedmaServiceUrl = "net.tcp://" + addresses[index] + ":8002/CEDMA";
-      this.store = store;
-    }
-
-    public void Start() {
-      host = new ServiceHost(store, new Uri(cedmaServiceUrl));
-      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
-      throttlingBehavior.MaxConcurrentSessions = 20;
-      host.Description.Behaviors.Add(throttlingBehavior);
-      try {
-        NetTcpBinding binding = new NetTcpBinding();
-        binding.SendTimeout = new TimeSpan(10, 0, 0);
-        binding.MaxReceivedMessageSize = int.MaxValue;
-        binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
-        binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
-        host.AddServiceEndpoint(typeof(IStore), binding, cedmaServiceUrl);
-        host.Open();
-      }
-      catch (CommunicationException ex) {
-        MessageBox.Show("An exception occurred: " + ex.Message);
-        host.Abort();
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/ServerApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/ServerApplication.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 Server server;
-    private Store store;
-    private IDispatcher dispatcher;
-    private Executer executer;
-
-    private static readonly string rdfFile = AppDomain.CurrentDomain.BaseDirectory + "rdf_store.db3";
-    private static readonly string rdfConnectionString = "sqlite:rdf:Data Source=\"" + rdfFile + "\"";
-
-    public ServerForm() {
-      InitializeComponent();
-      store = new Store(rdfConnectionString);
-      server = new Server(store);
-      server.Start();
-      addressTextBox.Text = server.CedmaServiceUrl;
-    }
-
-    private void refreshTimer_Tick(object sender, EventArgs e) {
-      listBox.DataSource = executer.GetJobs();
-    }
-
-    private void connectButton_Click(object sender, EventArgs e) {
-      dispatcher = new RandomDispatcher(store);
-      executer = new Executer(dispatcher, store, gridAddress.Text);
-      executer.Start();
-      maxActiveJobsUpDown.Enabled = true;
-      maxActiveJobsUpDown.Value = executer.MaxActiveJobs;
-      connectButton.Enabled = false;
-      refreshTimer.Start();
-    }
-
-    private void maxActiveJobsUpDown_ValueChanged(object sender, EventArgs e) {
-      executer.MaxActiveJobs = Convert.ToInt32(maxActiveJobsUpDown.Value);
-    }
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/ServerForm.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,176 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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.components = new System.ComponentModel.Container();
-      this.addressTextBox = new System.Windows.Forms.TextBox();
-      this.externalAddressLabel = new System.Windows.Forms.Label();
-      this.gridAddressLabel = new System.Windows.Forms.Label();
-      this.gridAddress = new System.Windows.Forms.TextBox();
-      this.connectButton = new System.Windows.Forms.Button();
-      this.listBox = new System.Windows.Forms.ListBox();
-      this.refreshTimer = new System.Windows.Forms.Timer(this.components);
-      this.maxActiveJobsUpDown = new System.Windows.Forms.NumericUpDown();
-      this.label1 = new System.Windows.Forms.Label();
-      ((System.ComponentModel.ISupportInitialize)(this.maxActiveJobsUpDown)).BeginInit();
-      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:";
-      // 
-      // 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(160, 20);
-      this.gridAddress.TabIndex = 8;
-      // 
-      // connectButton
-      // 
-      this.connectButton.Location = new System.Drawing.Point(272, 30);
-      this.connectButton.Name = "connectButton";
-      this.connectButton.Size = new System.Drawing.Size(75, 23);
-      this.connectButton.TabIndex = 10;
-      this.connectButton.Text = "Connect";
-      this.connectButton.UseVisualStyleBackColor = true;
-      this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
-      // 
-      // listBox
-      // 
-      this.listBox.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.listBox.FormattingEnabled = true;
-      this.listBox.Location = new System.Drawing.Point(12, 84);
-      this.listBox.Name = "listBox";
-      this.listBox.Size = new System.Drawing.Size(350, 251);
-      this.listBox.TabIndex = 11;
-      // 
-      // refreshTimer
-      // 
-      this.refreshTimer.Interval = 1000;
-      this.refreshTimer.Tick += new System.EventHandler(this.refreshTimer_Tick);
-      // 
-      // maxActiveJobsUpDown
-      // 
-      this.maxActiveJobsUpDown.Enabled = false;
-      this.maxActiveJobsUpDown.Location = new System.Drawing.Point(106, 59);
-      this.maxActiveJobsUpDown.Maximum = new decimal(new int[] {
-            64,
-            0,
-            0,
-            0});
-      this.maxActiveJobsUpDown.Name = "maxActiveJobsUpDown";
-      this.maxActiveJobsUpDown.Size = new System.Drawing.Size(120, 20);
-      this.maxActiveJobsUpDown.TabIndex = 12;
-      this.maxActiveJobsUpDown.ValueChanged += new System.EventHandler(this.maxActiveJobsUpDown_ValueChanged);
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Enabled = false;
-      this.label1.Location = new System.Drawing.Point(12, 61);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(84, 13);
-      this.label1.TabIndex = 13;
-      this.label1.Text = "&Max active jobs:";
-      // 
-      // ServerForm
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(374, 342);
-      this.Controls.Add(this.label1);
-      this.Controls.Add(this.maxActiveJobsUpDown);
-      this.Controls.Add(this.listBox);
-      this.Controls.Add(this.connectButton);
-      this.Controls.Add(this.gridAddressLabel);
-      this.Controls.Add(this.gridAddress);
-      this.Controls.Add(this.externalAddressLabel);
-      this.Controls.Add(this.addressTextBox);
-      this.Name = "ServerForm";
-      this.Text = "CEDMA Server";
-      ((System.ComponentModel.ISupportInitialize)(this.maxActiveJobsUpDown)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TextBox addressTextBox;
-    private System.Windows.Forms.Label externalAddressLabel;
-    private System.Windows.Forms.Label gridAddressLabel;
-    private System.Windows.Forms.TextBox gridAddress;
-    private System.Windows.Forms.Button connectButton;
-    private System.Windows.Forms.ListBox listBox;
-    private System.Windows.Forms.Timer refreshTimer;
-    private System.Windows.Forms.NumericUpDown maxActiveJobsUpDown;
-    private System.Windows.Forms.Label label1;
-  }
-}
Index: unk/sources/HeuristicLab.CEDMA.Server/ServerForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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="refreshTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/DataChartControl.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting.Data/3.2/DataRowType.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/DataRowType.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/DataRowType.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting.Data/3.2/Datachart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/Datachart.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/Datachart.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting.Data/3.2/HeuristicLab.Charting.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/HeuristicLab.Charting.Data.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/HeuristicLab.Charting.Data.csproj	(revision 1529)
@@ -0,0 +1,129 @@
+﻿<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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Charting.Data-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.Charting.Data/3.2/HeuristicLabChartingDataPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/HeuristicLabChartingDataPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/HeuristicLabChartingDataPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting.Data/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting.Data/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Charting.Data/DataChartControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/DataChartControl.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,88 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Charting.Data/DataChartControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/DataChartControl.cs	(revision 1528)
+++ 	(revision )
@@ -1,54 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Charting.Data/DataChartControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/DataChartControl.resx	(revision 1528)
+++ 	(revision )
@@ -1,151 +1,0 @@
-<?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: unk/sources/HeuristicLab.Charting.Data/DataRowType.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/DataRowType.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Charting.Data/Datachart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/Datachart.cs	(revision 1528)
+++ 	(revision )
@@ -1,113 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Charting.Data/HeuristicLab.Charting.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/HeuristicLab.Charting.Data.csproj	(revision 1528)
+++ 	(revision )
@@ -1,129 +1,0 @@
-﻿<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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Charting.Data-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.Charting.Data/HeuristicLabChartingDataPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting.Data/HeuristicLabChartingDataPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,33 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.Charting/3.2/AxisType.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/AxisType.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/AxisType.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Chart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Chart.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Chart.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/ChartControl.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/ChartMode.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/ChartMode.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/ChartMode.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/ClassDiagram.cd
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/ClassDiagram.cd	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/ClassDiagram.cd	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/HeuristicLab.Charting.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/HeuristicLab.Charting.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/HeuristicLab.Charting.csproj	(revision 1529)
@@ -0,0 +1,156 @@
+﻿<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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Charting-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.Charting/3.2/HeuristicLabChartingPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/HeuristicLabChartingPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/HeuristicLabChartingPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IChart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IChart.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IChart.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IGroup.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IGroup.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IGroup.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IPrimitive.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IPrimitive.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Interfaces/IPrimitive.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Axis.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Axis.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Axis.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/AxisPrimitiveBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/AxisPrimitiveBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/AxisPrimitiveBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Ellipse.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Ellipse.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Ellipse.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizeCircle.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizeCircle.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizeCircle.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizePrimitiveBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizePrimitiveBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizePrimitiveBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizeRectangle.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizeRectangle.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/FixedSizeRectangle.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Group.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Group.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Group.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Line.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Line.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Line.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/LinearPrimitiveBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/LinearPrimitiveBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/LinearPrimitiveBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/PrimitiveBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/PrimitiveBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/PrimitiveBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Rectangle.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Rectangle.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/Rectangle.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/RectangularPrimitiveBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/RectangularPrimitiveBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/RectangularPrimitiveBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Primitives/SelectionRectangle.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Primitives/SelectionRectangle.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Primitives/SelectionRectangle.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/PropertiesDialog.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Structs/Offset.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Structs/Offset.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Structs/Offset.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Structs/PointD.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Structs/PointD.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Structs/PointD.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Charting/3.2/Structs/SizeD.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/3.2/Structs/SizeD.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Charting/3.2/Structs/SizeD.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Charting/AxisType.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/AxisType.cs	(revision 1528)
+++ 	(revision )
@@ -1,34 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Charting/Chart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/Chart.cs	(revision 1528)
+++ 	(revision )
@@ -1,279 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Charting/ChartControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/ChartControl.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,205 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Charting/ChartControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/ChartControl.cs	(revision 1528)
+++ 	(revision )
@@ -1,224 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Charting/ChartControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.Charting/ChartControl.resx	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-<?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: unk/sources/HeuristicLab.Charting/ChartMode.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/ChartMode.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Charting/ClassDiagram.cd
===================================================================
--- /trunk/sources/HeuristicLab.Charting/ClassDiagram.cd	(revision 1528)
+++ 	(revision )
@@ -1,154 +1,0 @@
-﻿<?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: unk/sources/HeuristicLab.Charting/HeuristicLab.Charting.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Charting/HeuristicLab.Charting.csproj	(revision 1528)
+++ 	(revision )
@@ -1,156 +1,0 @@
-﻿<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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Charting-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.Charting/HeuristicLabChartingPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/HeuristicLabChartingPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Charting/PropertiesDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/PropertiesDialog.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,95 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Charting/PropertiesDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Charting/PropertiesDialog.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Charting/PropertiesDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Charting/PropertiesDialog.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: /trunk/sources/HeuristicLab.Communication.Data/3.2/DummyDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/DummyDriverConfiguration.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/DummyDriverConfiguration.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/HeuristicLab.Communication.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/HeuristicLab.Communication.Data.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/HeuristicLab.Communication.Data.csproj	(revision 1529)
@@ -0,0 +1,248 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <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: /trunk/sources/HeuristicLab.Communication.Data/3.2/HeuristicLabCommunicationDataPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/HeuristicLabCommunicationDataPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/HeuristicLabCommunicationDataPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/IDataStream.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/IDataStream.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/IDataStream.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/IDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/IDriverConfiguration.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/IDriverConfiguration.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/IObjectStream.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/IObjectStream.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/IObjectStream.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfiguration.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfiguration.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/LocalProcessDriverConfigurationView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/Message.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/Message.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/Message.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfiguration.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfiguration.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/OdbcDatabaseDriverConfigurationView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProcessData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProcessData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProcessData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/Protocol.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/Protocol.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/Protocol.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolState.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolState.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolState.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/ProtocolStateView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/SocketData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/SocketData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/SocketData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransition.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransition.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransition.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/StateTransitionView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfiguration.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfiguration.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/TcpNetworkDriverConfigurationView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Data/3.2/WindowedView.resx	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Communication.Data/DummyDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/DummyDriverConfiguration.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Data/HeuristicLab.Communication.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/HeuristicLab.Communication.Data.csproj	(revision 1528)
+++ 	(revision )
@@ -1,248 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <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: unk/sources/HeuristicLab.Communication.Data/HeuristicLabCommunicationDataPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/HeuristicLabCommunicationDataPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Data/IDataStream.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/IDataStream.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Data/IDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/IDriverConfiguration.cs	(revision 1528)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Data/IObjectStream.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/IObjectStream.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfiguration.cs	(revision 1528)
+++ 	(revision )
@@ -1,81 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,131 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.cs	(revision 1528)
+++ 	(revision )
@@ -1,69 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Data/Message.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/Message.cs	(revision 1528)
+++ 	(revision )
@@ -1,122 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfiguration.cs	(revision 1528)
+++ 	(revision )
@@ -1,187 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.cs	(revision 1528)
+++ 	(revision )
@@ -1,115 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,319 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Data/ProcessData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProcessData.cs	(revision 1528)
+++ 	(revision )
@@ -1,121 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/Protocol.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/Protocol.cs	(revision 1528)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Communication.Data/ProtocolEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,173 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Data/ProtocolEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,170 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/ProtocolEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Data/ProtocolState.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolState.cs	(revision 1528)
+++ 	(revision )
@@ -1,177 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Communication.Data/ProtocolStateView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolStateView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,236 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Data/ProtocolStateView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolStateView.cs	(revision 1528)
+++ 	(revision )
@@ -1,89 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/ProtocolStateView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/ProtocolStateView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Data/SocketData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/SocketData.cs	(revision 1528)
+++ 	(revision )
@@ -1,199 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/StateTransition.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/StateTransition.cs	(revision 1528)
+++ 	(revision )
@@ -1,97 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Communication.Data/StateTransitionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/StateTransitionView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,142 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Data/StateTransitionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/StateTransitionView.cs	(revision 1528)
+++ 	(revision )
@@ -1,146 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/StateTransitionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/StateTransitionView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfiguration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfiguration.cs	(revision 1528)
+++ 	(revision )
@@ -1,98 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,135 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.cs	(revision 1528)
+++ 	(revision )
@@ -1,68 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Data/WindowedView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/WindowedView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,84 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Data/WindowedView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/WindowedView.cs	(revision 1528)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Data/WindowedView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Data/WindowedView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/CommunicatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/CommunicatorBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/CommunicatorBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/CurrentStateInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/CurrentStateInitializer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/CurrentStateInitializer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/DataStreamCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/DataStreamCommunicator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/DataStreamCommunicator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/DataStreamFinisher.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/DataStreamFinisher.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/DataStreamFinisher.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/HeuristicLab.Communication.Operators.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/HeuristicLab.Communication.Operators.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/HeuristicLab.Communication.Operators.csproj	(revision 1529)
@@ -0,0 +1,161 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/HeuristicLabCommunicationOperatorsPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/HeuristicLabCommunicationOperatorsPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/HeuristicLabCommunicationOperatorsPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/LocalProcessInitiator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/LocalProcessInitiator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/LocalProcessInitiator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/MessageInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/MessageInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/MessageInjector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/MessageProcessor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/MessageProcessor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/MessageProcessor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/ProtocolInjectorView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/StateTransistor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/StateTransistor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/StateTransistor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/SubScopeMessageComposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/SubScopeMessageComposer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/SubScopeMessageComposer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Communication.Operators/3.2/SubScopeMessageDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/SubScopeMessageDecomposer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/SubScopeMessageDecomposer.cs	(revision 1529)
@@ -0,0 +1,37 @@
+﻿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.Give.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);
+        i++;
+      }
+      IVariableInfo info = GetVariableInfo("Message");
+      if (info.Local) {
+        RemoveVariable(info.ActualName);
+      } else {
+        scope.RemoveVariable(scope.TranslateName(info.FormalName));
+      }
+      return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Communication.Operators/3.2/TcpNetworkInitiator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/3.2/TcpNetworkInitiator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Communication.Operators/3.2/TcpNetworkInitiator.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Communication.Operators/CommunicatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/CommunicatorBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Operators/CurrentStateInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/CurrentStateInitializer.cs	(revision 1528)
+++ 	(revision )
@@ -1,67 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs	(revision 1528)
+++ 	(revision )
@@ -1,100 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Operators/DataStreamFinisher.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/DataStreamFinisher.cs	(revision 1528)
+++ 	(revision )
@@ -1,61 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Operators/HeuristicLab.Communication.Operators.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/HeuristicLab.Communication.Operators.csproj	(revision 1528)
+++ 	(revision )
@@ -1,161 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <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: unk/sources/HeuristicLab.Communication.Operators/HeuristicLabCommunicationOperatorsPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/HeuristicLabCommunicationOperatorsPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs	(revision 1528)
+++ 	(revision )
@@ -1,55 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Operators/MessageInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/MessageInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Operators/MessageProcessor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/MessageProcessor.cs	(revision 1528)
+++ 	(revision )
@@ -1,77 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Operators/ProtocolInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/ProtocolInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,54 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Operators/ProtocolInjectorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/ProtocolInjectorView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,169 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Communication.Operators/ProtocolInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/ProtocolInjectorView.cs	(revision 1528)
+++ 	(revision )
@@ -1,108 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Communication.Operators/ProtocolInjectorView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/ProtocolInjectorView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.Communication.Operators/StateTransistor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/StateTransistor.cs	(revision 1528)
+++ 	(revision )
@@ -1,117 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Communication.Operators/SubScopeMessageComposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/SubScopeMessageComposer.cs	(revision 1528)
+++ 	(revision )
@@ -1,40 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs	(revision 1528)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿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.Give.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);
-        i++;
-      }
-      IVariableInfo info = GetVariableInfo("Message");
-      if (info.Local) {
-        RemoveVariable(info.ActualName);
-      } else {
-        scope.RemoveVariable(scope.TranslateName(info.FormalName));
-      }
-      return null;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Communication.Operators/TcpNetworkInitiator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/TcpNetworkInitiator.cs	(revision 1528)
+++ 	(revision )
@@ -1,69 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AllSubOperatorsTypeConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/AndConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/ConstraintBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/ConstraintBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/ConstraintBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/DoubleBoundedConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/HeuristicLab.Constraints.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/HeuristicLab.Constraints.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/HeuristicLab.Constraints.csproj	(revision 1529)
@@ -0,0 +1,232 @@
+﻿<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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Constraints-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.Constraints/3.2/HeuristicLabConstraintsPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/HeuristicLabConstraintsPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/HeuristicLabConstraintsPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/IntBoundedConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/IsIntegerConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/IsIntegerConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/IsIntegerConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/ItemTypeConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NotConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/NumberOfSubOperatorsConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/OrConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsConstraintAnalyser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsConstraintAnalyser.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsConstraintAnalyser.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/SubOperatorsTypeConstraintView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Constraints/3.2/VariableComparisonConstraintView.resx	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,162 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,113 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,166 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/AndConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AndConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,132 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/AndConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AndConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/AndConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AndConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,99 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/AndConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/AndConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/ConstraintBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/ConstraintBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/DoubleBoundedConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,263 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/DoubleBoundedConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/DoubleBoundedConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,148 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/DoubleBoundedConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/DoubleBoundedConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,163 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/DoubleBoundedConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/DoubleBoundedConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/HeuristicLab.Constraints.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/HeuristicLab.Constraints.csproj	(revision 1528)
+++ 	(revision )
@@ -1,232 +1,0 @@
-﻿<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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Constraints-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.Constraints/HeuristicLabConstraintsPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/HeuristicLabConstraintsPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Constraints/IntBoundedConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,249 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/IntBoundedConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/IntBoundedConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,149 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/IntBoundedConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/IntBoundedConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,163 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/IntBoundedConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/IntBoundedConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/IsIntegerConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/IsIntegerConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Constraints/ItemTypeConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,142 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/ItemTypeConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/ItemTypeConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,98 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/ItemTypeConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/ItemTypeConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,112 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/ItemTypeConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/ItemTypeConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/NotConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NotConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,127 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/NotConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NotConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,89 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/NotConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NotConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,152 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/NotConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NotConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,145 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,111 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,58 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/OrConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/OrConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,132 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/OrConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/OrConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,77 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/OrConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/OrConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,94 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/OrConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/OrConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/SubOperatorsConstraintAnalyser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/SubOperatorsConstraintAnalyser.cs	(revision 1528)
+++ 	(revision )
@@ -1,186 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,191 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,101 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,58 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Constraints/VariableComparisonConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/VariableComparisonConstraint.cs	(revision 1528)
+++ 	(revision )
@@ -1,181 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Constraints/VariableComparisonConstraintView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/VariableComparisonConstraintView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,196 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Constraints/VariableComparisonConstraintView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/VariableComparisonConstraintView.cs	(revision 1528)
+++ 	(revision )
@@ -1,145 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Constraints/VariableComparisonConstraintView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Constraints/VariableComparisonConstraintView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: /trunk/sources/HeuristicLab.Core/3.2/AliasEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/AliasEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/AliasEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/AtomicOperation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/AtomicOperation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/AtomicOperation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Auxiliary.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Auxiliary.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Auxiliary.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseItemDialog.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseOperatorDialog.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ChooseTypeDialog.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/CompositeOperation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/CompositeOperation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/CompositeOperation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ConstrainedItemBaseView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ConstraintEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ConstraintEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ConstraintEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EditorBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EditorBase.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EditorBase.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EditorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EditorBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EditorBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EditorBase.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EditorBase.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EditorBase.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EngineBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EngineBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EngineBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/EngineBaseEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ExceptionEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ExceptionEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ExceptionEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/HeuristicLab.Core.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/HeuristicLab.Core.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/HeuristicLab.Core.csproj	(revision 1529)
@@ -0,0 +1,389 @@
+﻿<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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Core-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.Core/3.2/HeuristicLabCorePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/HeuristicLabCorePlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/HeuristicLabCorePlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IConstrainedItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IConstrainedItem.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IConstrainedItem.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IConstraint.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IConstraint.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IConstraint.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEditable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEditable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEditable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEngine.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IEngine.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IItem.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IItem.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorGraph.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorGraph.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorGraph.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorGroup.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorGroup.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorGroup.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorLibrary.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorLibrary.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IOperatorLibrary.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IRandom.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IRandom.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IRandom.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IScope.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IScope.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IScope.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IStorable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IStorable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IStorable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVariable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVariable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVariable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVariableInfo.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVariableInfo.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVariableInfo.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IViewable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IViewable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IViewable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVisualizationItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVisualizationItem.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Interfaces/IVisualizationItem.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ItemBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ItemBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ItemBaseView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ItemEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ItemEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ItemEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ItemIndexEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ItemIndexEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ItemIndexEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/KeyValueEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/KeyValueEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/KeyValueEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/NameChangingEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/NameChangingEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/NameChangingEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperationEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperationEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperationEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseDescriptionView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariableInfosView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseVariablesView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorBaseView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorGraph.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorGraph.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorGraph.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorGraphView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorGroup.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorGroup.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorGroup.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorIndexEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorIndexEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorIndexEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorLibrary.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorLibrary.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorLibrary.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/OperatorLibraryEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/PersistenceManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/PersistenceManager.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/PersistenceManager.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Properties/Resources.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Properties/Resources.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Properties/Resources.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Properties/Resources.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Properties/Resources.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Properties/Resources.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Scope.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Scope.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Scope.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ScopeEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ScopeEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ScopeEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ScopeIndexEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ScopeIndexEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ScopeIndexEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ScopeView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ScopeView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ScopeView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ScopeView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ScopeView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ScopeView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ScopeView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/StorableBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/StorableBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/StorableBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/Variable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/Variable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableInfo.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableInfo.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableInfo.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableInfoEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableInfoEventArgs.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableInfoEventArgs.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableInfoView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableKind.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableKind.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableKind.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariableView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariableView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariableView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/VariablesScopeView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ViewBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ViewBase.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ViewBase.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Core/3.2/ViewBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.2/ViewBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Core/3.2/ViewBase.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Core/AliasEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/AliasEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/AtomicOperation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/AtomicOperation.cs	(revision 1528)
+++ 	(revision )
@@ -1,112 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/Auxiliary.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/Auxiliary.cs	(revision 1528)
+++ 	(revision )
@@ -1,130 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/ChooseItemDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseItemDialog.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/ChooseItemDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseItemDialog.cs	(revision 1528)
+++ 	(revision )
@@ -1,191 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Core/ChooseItemDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseItemDialog.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/ChooseOperatorDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseOperatorDialog.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,342 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/ChooseOperatorDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseOperatorDialog.cs	(revision 1528)
+++ 	(revision )
@@ -1,185 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Core/ChooseOperatorDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseOperatorDialog.resx	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/ChooseTypeDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseTypeDialog.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/ChooseTypeDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseTypeDialog.cs	(revision 1528)
+++ 	(revision )
@@ -1,153 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Core/ChooseTypeDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/ChooseTypeDialog.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/CompositeOperation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/CompositeOperation.cs	(revision 1528)
+++ 	(revision )
@@ -1,137 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/ConstrainedItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ConstrainedItemBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,189 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/ConstrainedItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ConstrainedItemBaseView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,174 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Core/ConstrainedItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ConstrainedItemBaseView.cs	(revision 1528)
+++ 	(revision )
@@ -1,182 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/ConstrainedItemBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/ConstrainedItemBaseView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/ConstraintEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ConstraintEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/EditorBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/EditorBase.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/EditorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/EditorBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,82 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/EditorBase.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/EditorBase.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/EngineBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/EngineBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,349 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/EngineBaseEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/EngineBaseEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,214 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/EngineBaseEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/EngineBaseEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,170 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/EngineBaseEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/EngineBaseEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/ExceptionEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ExceptionEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/HeuristicLab.Core.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core/HeuristicLab.Core.csproj	(revision 1528)
+++ 	(revision )
@@ -1,389 +1,0 @@
-﻿<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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Core-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.Core/HeuristicLabCorePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/HeuristicLabCorePlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/ItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ItemBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,69 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/ItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ItemBaseView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/ItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ItemBaseView.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/ItemBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/ItemBaseView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/ItemEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ItemEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/ItemIndexEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ItemIndexEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/KeyValueEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/KeyValueEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Core/NameChangingEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/NameChangingEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,61 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/OperationEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperationEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/OperatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,681 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/OperatorBaseDescriptionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseDescriptionView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,84 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Core/OperatorBaseDescriptionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseDescriptionView.cs	(revision 1528)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/OperatorBaseDescriptionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseDescriptionView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/OperatorBaseVariableInfosView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseVariableInfosView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,144 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Core/OperatorBaseVariableInfosView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseVariableInfosView.cs	(revision 1528)
+++ 	(revision )
@@ -1,188 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/OperatorBaseVariableInfosView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseVariableInfosView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/OperatorBaseVariablesView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseVariablesView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,177 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Core/OperatorBaseVariablesView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseVariablesView.cs	(revision 1528)
+++ 	(revision )
@@ -1,219 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/OperatorBaseVariablesView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseVariablesView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/OperatorBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,194 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Core/OperatorBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseView.cs	(revision 1528)
+++ 	(revision )
@@ -1,100 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/OperatorBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorBaseView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/OperatorEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/OperatorGraph.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorGraph.cs	(revision 1528)
+++ 	(revision )
@@ -1,215 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/OperatorGraphView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorGraphView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,288 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/OperatorGraphView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorGraphView.cs	(revision 1528)
+++ 	(revision )
@@ -1,514 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/OperatorGraphView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorGraphView.resx	(revision 1528)
+++ 	(revision )
@@ -1,185 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/OperatorGroup.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorGroup.cs	(revision 1528)
+++ 	(revision )
@@ -1,193 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/OperatorIndexEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorIndexEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/OperatorLibrary.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorLibrary.cs	(revision 1528)
+++ 	(revision )
@@ -1,106 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/OperatorLibraryEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorLibraryEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,196 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/OperatorLibraryEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorLibraryEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,346 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Core/OperatorLibraryEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/OperatorLibraryEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,129 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/PersistenceManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/PersistenceManager.cs	(revision 1528)
+++ 	(revision )
@@ -1,237 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/Scope.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/Scope.cs	(revision 1528)
+++ 	(revision )
@@ -1,435 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/ScopeEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ScopeEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/ScopeIndexEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ScopeIndexEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/ScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ScopeView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,146 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/ScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ScopeView.cs	(revision 1528)
+++ 	(revision )
@@ -1,280 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/ScopeView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/ScopeView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/StorableBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/StorableBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,97 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/Variable.cs	(revision 1528)
+++ 	(revision )
@@ -1,185 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/VariableEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/VariableInfo.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableInfo.cs	(revision 1528)
+++ 	(revision )
@@ -1,248 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Core/VariableInfoEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableInfoEventArgs.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/VariableInfoView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableInfoView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,217 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/VariableInfoView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableInfoView.cs	(revision 1528)
+++ 	(revision )
@@ -1,127 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/VariableInfoView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableInfoView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/VariableKind.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableKind.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: unk/sources/HeuristicLab.Core/VariableView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,143 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/VariableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableView.cs	(revision 1528)
+++ 	(revision )
@@ -1,142 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/VariableView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariableView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/VariablesScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariablesScopeView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,175 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Core/VariablesScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariablesScopeView.cs	(revision 1528)
+++ 	(revision )
@@ -1,226 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Core/VariablesScopeView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core/VariablesScopeView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Core/ViewBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ViewBase.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,57 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Core/ViewBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/ViewBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,166 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ArrayDataBaseView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolArrayData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolArrayData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolArrayData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolArrayDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolArrayDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolArrayDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolArrayDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolArrayDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolArrayDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolDataView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/BoolMatrixDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedDoubleDataView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedIntDataView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemList.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemList.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedItemListView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ConstrainedObjectData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ConstrainedObjectData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ConstrainedObjectData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleArrayDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleDataView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/DoubleMatrixDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/EditKeyValueDialog.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/HeuristicLab.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/HeuristicLab.Data.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/HeuristicLab.Data.csproj	(revision 1529)
@@ -0,0 +1,331 @@
+﻿<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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Data-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.Data/3.2/HeuristicLabDataPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/HeuristicLabDataPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/HeuristicLabDataPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IObjectData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IObjectData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IObjectData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntArrayData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntArrayData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntArrayData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntArrayDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntArrayDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntArrayDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntArrayDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntArrayDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntArrayDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntDataView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntDataView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntMatrixData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntMatrixData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntMatrixData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntMatrixDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntMatrixDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntMatrixDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/IntMatrixDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/IntMatrixDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/IntMatrixDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemDictionaryView_T.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemDictionary_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemDictionary_T.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemDictionary_T.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemList.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemList.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemListView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemListView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemListView_T.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ItemList_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ItemList_T.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ItemList_T.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/MatrixDataBaseView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/NullData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/NullData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/NullData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/ObjectData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/ObjectData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/ObjectData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/StringData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/StringData.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/StringData.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/StringDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/StringDataView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/StringDataView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/StringDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/StringDataView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/StringDataView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Data/3.2/StringDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.2/StringDataView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Data/3.2/StringDataView.resx	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Data/ArrayDataBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ArrayDataBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,58 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/ArrayDataBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ArrayDataBaseView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,109 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/ArrayDataBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ArrayDataBaseView.cs	(revision 1528)
+++ 	(revision )
@@ -1,166 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ArrayDataBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/ArrayDataBaseView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/BoolArrayData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolArrayData.cs	(revision 1528)
+++ 	(revision )
@@ -1,98 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/BoolArrayDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolArrayDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/BoolArrayDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolArrayDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,87 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/BoolData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolData.cs	(revision 1528)
+++ 	(revision )
@@ -1,102 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/BoolDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,77 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/BoolDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,103 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/BoolDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolDataView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/BoolMatrixData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolMatrixData.cs	(revision 1528)
+++ 	(revision )
@@ -1,125 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/BoolMatrixDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolMatrixDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/BoolMatrixDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/BoolMatrixDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,88 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ConstrainedDoubleData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedDoubleData.cs	(revision 1528)
+++ 	(revision )
@@ -1,113 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/ConstrainedDoubleDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedDoubleDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,91 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/ConstrainedDoubleDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedDoubleDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,122 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ConstrainedDoubleDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedDoubleDataView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/ConstrainedIntData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedIntData.cs	(revision 1528)
+++ 	(revision )
@@ -1,113 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/ConstrainedIntDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedIntDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,91 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/ConstrainedIntDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedIntDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,122 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ConstrainedIntDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedIntDataView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/ConstrainedItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedItemList.cs	(revision 1528)
+++ 	(revision )
@@ -1,358 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Data/ConstrainedItemListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedItemListView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,218 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/ConstrainedItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedItemListView.cs	(revision 1528)
+++ 	(revision )
@@ -1,208 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ConstrainedItemListView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedItemListView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/ConstrainedObjectData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ConstrainedObjectData.cs	(revision 1528)
+++ 	(revision )
@@ -1,140 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/DoubleArrayData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleArrayData.cs	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/DoubleArrayDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleArrayDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/DoubleArrayDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleArrayDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,89 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/DoubleData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleData.cs	(revision 1528)
+++ 	(revision )
@@ -1,112 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/DoubleDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/DoubleDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,110 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/DoubleDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleDataView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/DoubleMatrixData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleMatrixData.cs	(revision 1528)
+++ 	(revision )
@@ -1,144 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/DoubleMatrixDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleMatrixDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/DoubleMatrixDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/DoubleMatrixDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,92 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/EditKeyValueDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/EditKeyValueDialog.cs	(revision 1528)
+++ 	(revision )
@@ -1,48 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Data/EditKeyValueDialog.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/EditKeyValueDialog.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,131 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Data/EditKeyValueDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/EditKeyValueDialog.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/HeuristicLab.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Data/HeuristicLab.Data.csproj	(revision 1528)
+++ 	(revision )
@@ -1,331 +1,0 @@
-﻿<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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Data-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.Data/HeuristicLabDataPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/HeuristicLabDataPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Data/IObjectData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IObjectData.cs	(revision 1528)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Data/IntArrayData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntArrayData.cs	(revision 1528)
+++ 	(revision )
@@ -1,117 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/IntArrayDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntArrayDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/IntArrayDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntArrayDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,87 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/IntData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntData.cs	(revision 1528)
+++ 	(revision )
@@ -1,106 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/IntDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/IntDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,110 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/IntDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntDataView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/IntMatrixData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntMatrixData.cs	(revision 1528)
+++ 	(revision )
@@ -1,142 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/IntMatrixDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntMatrixDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/IntMatrixDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/IntMatrixDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,88 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ItemDictionaryView_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemDictionaryView_T.cs	(revision 1528)
+++ 	(revision )
@@ -1,215 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Data/ItemDictionaryView_T.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemDictionaryView_T.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,210 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Data/ItemDictionaryView_T.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemDictionaryView_T.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/ItemDictionary_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemDictionary_T.cs	(revision 1528)
+++ 	(revision )
@@ -1,352 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Data/ItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemList.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Data/ItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemListView.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ItemListView_T.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemListView_T.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,209 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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: unk/sources/HeuristicLab.Data/ItemListView_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemListView_T.cs	(revision 1528)
+++ 	(revision )
@@ -1,263 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/ItemListView_T.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemListView_T.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/ItemList_T.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ItemList_T.cs	(revision 1528)
+++ 	(revision )
@@ -1,400 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a 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: unk/sources/HeuristicLab.Data/MatrixDataBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/MatrixDataBaseView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,138 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/MatrixDataBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/MatrixDataBaseView.cs	(revision 1528)
+++ 	(revision )
@@ -1,184 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/MatrixDataBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/MatrixDataBaseView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.Data/NullData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/NullData.cs	(revision 1528)
+++ 	(revision )
@@ -1,61 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/ObjectData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/ObjectData.cs	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/StringData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/StringData.cs	(revision 1528)
+++ 	(revision )
@@ -1,112 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Data/StringDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/StringDataView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Data/StringDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/StringDataView.cs	(revision 1528)
+++ 	(revision )
@@ -1,104 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Data/StringDataView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Data/StringDataView.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/BinaryRelation.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/BinaryRelation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/BinaryRelation.cs	(revision 1529)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class BinaryRelation: PersistableObject {
+    public Guid Id2 { get; set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/BinaryRelationHelper.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/BinaryRelationHelper.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/BinaryRelationHelper.cs	(revision 1529)
@@ -0,0 +1,93 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class BinaryRelationHelper<AdapterT, RowT>
+    where AdapterT : new()
+    where RowT : System.Data.DataRow
+    {
+    IDataAdapterWrapper<AdapterT, BinaryRelation, RowT> tableAdapterWrapper;
+    
+    public BinaryRelationHelper(
+      IDataAdapterWrapper<AdapterT, BinaryRelation, RowT> tableAdapterWrapper) {
+      this.tableAdapterWrapper = tableAdapterWrapper;
+    }
+
+    public Session Session {
+      set {
+        tableAdapterWrapper.Session = value;
+      }
+    }
+
+    public void UpdateRelationships(Guid objectA, IList<Guid> relationships) {
+      //firstly check for created references
+      IList<Guid> existing =
+        this.GetRelationships(objectA);
+
+      foreach (Guid relationship in relationships) {
+        if (!existing.Contains(relationship)) {
+          BinaryRelation rel = 
+            new BinaryRelation();
+          rel.Id = objectA;
+          rel.Id2 = relationship;
+          
+          RowT inserted = 
+            tableAdapterWrapper.InsertNewRow(rel);
+
+          tableAdapterWrapper.UpdateRow(inserted);
+        }
+      }
+
+      //secondly check for deleted references
+      ICollection<Guid> deleted =
+        new List<Guid>();
+
+      foreach (Guid relationship in existing) {
+        if(!relationships.Contains(relationship)) {
+          deleted.Add(relationship);
+        }
+      }
+
+      foreach (Guid relationship in deleted) {
+        RowT toDelete =
+          FindRow(objectA, relationship);
+        if (toDelete != null) {
+          toDelete.Delete();
+          tableAdapterWrapper.UpdateRow(toDelete);
+        }
+      }
+    }
+
+    public IList<Guid> GetRelationships(Guid objectA) {
+      IList<Guid> result =
+        new List<Guid>();
+
+      IEnumerable<RowT> rows = 
+        tableAdapterWrapper.FindById(objectA);
+
+      foreach(RowT row in rows) {
+        result.Add((Guid)row[1]);
+      }
+
+      return result;
+    }
+
+    private RowT FindRow(Guid objectA, Guid objectB) {
+      IEnumerable<RowT> rows =
+       tableAdapterWrapper.FindById(objectA);
+
+      RowT found = null;
+
+      foreach (RowT row in rows) {
+        if (row[1].Equals(objectB)) {
+          found = row;
+          break;
+        }
+      }
+
+      return found;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAccessADOHelperPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAccessADOHelperPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAccessADOHelperPlugin.cs	(revision 1529)
@@ -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.DataAccess.ADOHelper {
+  [ClassInfo(Name = "HeuristicLab.DataAccess.ADOHelper-3.2")]
+  [PluginFile(Filename = "HeuristicLab.DataAccess.ADOHelper-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class DataAccessADOHelperPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAdapterBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAdapterBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAdapterBase.cs	(revision 1529)
@@ -0,0 +1,294 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received 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.Text;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public abstract class DataAdapterBase<AdapterT, ObjT, RowT>
+    where AdapterT : new()
+    where RowT : System.Data.DataRow
+    where ObjT : IPersistableObject, new() {
+
+    private ISession session;
+
+    private IDataAdapterWrapper<AdapterT, ObjT, RowT> dataAdapter;
+
+    protected DataAdapterBase(
+      IDataAdapterWrapper<AdapterT, ObjT, RowT> dataAdapter) {
+      this.dataAdapter = dataAdapter;
+    }
+
+    protected AdapterT Adapter {
+      get {
+        return dataAdapter.TransactionalAdapter;
+      }
+    }
+
+    protected IDataAdapterWrapper<AdapterT, ObjT, RowT> DataAdapterWrapper {
+      get {
+        return dataAdapter;
+      }
+    }
+
+    public ISession Session {
+      get {
+        return this.session;
+      }
+
+      set {
+        if (!(value is Session))
+          throw new Exception("Can only bind to ADO session");
+
+        this.session = value;
+        this.dataAdapter.Session = value as Session;
+      }
+    }
+
+    public object InnerAdapter {
+      get {
+        return this.Adapter;
+      }
+    }
+
+    #region Abstract methods
+    protected abstract RowT ConvertObj(ObjT obj, RowT row);
+
+    protected abstract ObjT ConvertRow(RowT row, ObjT obj);
+    #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 RowT FindSingleRow(Selector selector) {
+      RowT row = default(RowT);
+
+      IEnumerable<RowT> found =
+        selector();
+
+      if (found.Count<RowT>() == 1)
+        row = found.First<RowT>();
+
+      return row;
+    }
+
+    protected ObjT FindSingle(Selector selector) {
+      ITransaction trans =
+       session.GetCurrentTransaction();
+      bool transactionExists = trans != null;
+      if (!transactionExists) {
+        trans = session.BeginTransaction();
+      }
+
+      try {
+        RowT row = FindSingleRow(selector);
+
+        ObjT result;
+        if (row != null) {
+          ObjT obj = new ObjT();
+          obj = Convert(row, obj);
+
+          result = obj;
+        } else {
+          result = default(ObjT);
+        }
+
+        return result;
+      }
+      finally {
+        if (!transactionExists && trans != null) {
+          trans.Commit();
+        }
+      }
+    }
+
+    protected ICollection<ObjT> FindMultiple(Selector selector) {
+      ITransaction trans =
+       session.GetCurrentTransaction();
+      bool transactionExists = trans != null;
+      if (!transactionExists) {
+        trans = session.BeginTransaction();
+      }
+
+      try {
+        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;
+      }
+      finally {
+        if (!transactionExists && trans != null) {
+          trans.Commit();
+        }
+      }     
+    }
+
+    protected virtual RowT GetRowById(Guid id) {
+      return FindSingleRow(
+        delegate() {
+          return dataAdapter.FindById(id);
+        });
+    }
+
+    protected virtual void doUpdate(ObjT obj) {
+      if (obj != null) {
+        RowT row = null;
+
+        if (obj.Id != Guid.Empty) {
+          row = GetRowById(obj.Id);
+        } else {
+          obj.Id = Guid.NewGuid();
+        }
+
+        if (row == null) {
+          row = dataAdapter.InsertNewRow(obj);
+        }
+
+        ConvertObj(obj, row);
+        dataAdapter.UpdateRow(row);
+      }
+    }
+
+    public void Update(ObjT obj) {
+      ITransaction trans =
+        session.GetCurrentTransaction();
+      bool transactionExists = trans != null;
+      if (!transactionExists) {
+        trans = session.BeginTransaction();
+      }
+
+      try {
+        doUpdate(obj);
+      }
+      catch (DBConcurrencyException ex) {
+        DataRow row = ex.Row;
+
+        RowT current = GetRowById(obj.Id);
+        if (current != null) {
+          //find out changes
+          for (int i = 0; i < row.ItemArray.Length; i++) {            
+            if (!row[i, DataRowVersion.Current].Equals(
+                 row[i, DataRowVersion.Original])) {
+              current[i] = row[i];
+            }
+          }
+
+          ConvertRow(current, obj);
+          //try updating again
+          Update(obj);
+        }
+        //otherwise: row was deleted in the meantime - nothing to do
+      }
+      finally {
+        if (!transactionExists && trans != null) {
+          trans.Commit();
+        }
+      }
+    }
+
+    public virtual ObjT GetById(Guid id) {
+      return FindSingle(delegate() {
+        return dataAdapter.FindById(id);
+      });
+    }
+
+    public virtual ICollection<ObjT> GetAll() {
+      return new List<ObjT>(
+        FindMultiple(
+          new Selector(dataAdapter.FindAll)));
+    }
+
+    protected virtual bool doDelete(ObjT obj) {
+      bool success = false;
+
+      if (obj != null) {
+        RowT row =
+          GetRowById(obj.Id);
+
+        if (row != null) {
+          row.Delete();
+          dataAdapter.UpdateRow(row);
+
+          success = true;
+        }
+      }
+
+      return success;
+    }
+
+    public bool Delete(ObjT obj) {
+      ITransaction trans =
+        session.GetCurrentTransaction();
+      bool transactionExists = trans != null;
+      if (!transactionExists) {
+        trans = session.BeginTransaction();
+      }
+
+      try {
+        return doDelete(obj);
+      }
+      catch (DBConcurrencyException) {
+        RowT current = GetRowById(obj.Id);
+        if (current != null) {
+          ConvertRow(current, obj);
+          //try deleting again
+          return Delete(obj);
+        } else {
+          //row has already been deleted
+          return false;
+        }
+      }
+      finally {
+        if (!transactionExists && trans != null) {
+          trans.Commit();
+        }
+      }  
+    }
+  }
+}
+
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAdapterWrapperBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAdapterWrapperBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/DataAdapterWrapperBase.cs	(revision 1529)
@@ -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.DataAccess.Interfaces;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public abstract class DataAdapterWrapperBase<AdapterT, ObjT, RowT>:
+    IDataAdapterWrapper<AdapterT, ObjT, RowT>
+    where AdapterT : new()
+    where ObjT : IPersistableObject, new()
+    where RowT : System.Data.DataRow {
+    protected AdapterT adapter =
+      new AdapterT();
+
+    private ISession session;
+    
+    #region IDataAdapterWrapper<AdapterT,ObjT,RowT> Members
+
+    public AdapterT TransactionalAdapter {
+      get {
+        if (session == null)
+          throw new Exception("No session set!");
+
+        ITransaction trans =
+          session.GetCurrentTransaction();
+        if (trans != null)
+          SetTransaction(trans.InnerTransaction as DbTransaction);
+        else
+          SetTransaction(null);
+
+        return this.adapter; 
+      }
+    }
+
+    public Session Session {
+      set { 
+        this.session = value;
+
+        SetConnection(value.Connection); 
+      }
+    }
+
+    public abstract void UpdateRow(RowT row);
+
+    public abstract RowT InsertNewRow(ObjT obj);
+
+    public abstract IEnumerable<RowT> FindById(Guid id);
+
+    public abstract IEnumerable<RowT> FindAll();
+
+    protected abstract void SetConnection(DbConnection connection);
+
+    protected abstract void SetTransaction(DbTransaction transaction);
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/HeuristicLab.DataAccess.ADOHelper.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/HeuristicLab.DataAccess.ADOHelper.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/HeuristicLab.DataAccess.ADOHelper.csproj	(revision 1529)
@@ -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>{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DataAccess.ADOHelper</RootNamespace>
+    <AssemblyName>HeuristicLab.DataAccess.ADOHelper-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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <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>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="DataAccessADOHelperPlugin.cs" />
+    <Compile Include="DataAdapterBase.cs" />
+    <Compile Include="DataAdapterWrapperBase.cs" />
+    <Compile Include="IDataAdapterWrapper.cs" />
+    <Compile Include="BinaryRelation.cs" />
+    <Compile Include="BinaryRelationHelper.cs" />
+    <Compile Include="Session.cs" />
+    <Compile Include="SessionFactory.cs" />
+    <Compile Include="Transaction.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.DataAccess\HeuristicLab.DataAccess.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.XML" />
+  </ItemGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/IDataAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/IDataAdapterWrapper.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/IDataAdapterWrapper.cs	(revision 1529)
@@ -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.DataAccess.Interfaces;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public interface IDataAdapterWrapper<AdapterT, ObjT, RowT>
+   where AdapterT : new()
+   where ObjT : IPersistableObject, new()
+   where RowT : System.Data.DataRow {
+    void UpdateRow(RowT row);
+
+    RowT InsertNewRow(ObjT obj);
+
+    IEnumerable<RowT> FindById(Guid id);
+
+    IEnumerable<RowT> FindAll();
+
+    AdapterT TransactionalAdapter { get; }
+
+    Session Session { set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.DataAccess.ADOHelper")]
+[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("99D769C4-55B0-4f2a-81B4-11763DCD7A03")]
+
+// 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: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Session.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Session.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Session.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.DataAccess.Interfaces;
+using HeuristicLab.PluginInfrastructure;
+using System.Data.Common;
+using System.Threading;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class Session: ISession {
+    private static DiscoveryService discoveryService =
+      new DiscoveryService();
+
+    private SessionFactory factory;
+
+    private Transaction transaction;
+
+    private DbConnection connection;
+
+    private Thread ownerThread;
+
+    private IDictionary<Guid, object> adapters =
+      new Dictionary<Guid, object>();
+
+    public Session(SessionFactory factory) {
+      this.factory = factory;
+      this.ownerThread = Thread.CurrentThread;
+    }
+
+    public void CheckThread() {
+      if (!Thread.CurrentThread.Equals(ownerThread)) {
+        throw new Exception("Session is owned by another thread");
+      }
+    }
+
+    public DbConnection Connection {
+      get {
+        if (connection == null) {
+          connection = factory.CreateConnection();
+        }
+
+        return connection;
+      }
+    }
+
+    public void DetachTrasaction() {
+      this.transaction = null;
+    }
+
+    #region ISession Members
+    public ITransaction BeginTransaction() {
+      CheckThread();
+
+      if (transaction == null) {
+         transaction = new Transaction(this);
+         transaction.Connection = Connection;
+      }
+
+      return transaction;
+    }
+
+    public ITransaction GetCurrentTransaction() {
+      CheckThread();
+
+      return transaction;
+    }
+
+    public IDataAdapter<ObjT> GetDataAdapter<ObjT>()
+      where ObjT : IPersistableObject {
+      CheckThread();
+
+      Guid adapterId = typeof(IDataAdapter<ObjT>).GUID;
+
+      if (!adapters.ContainsKey(adapterId)) {
+        IDataAdapter<ObjT> adapter =
+          discoveryService.GetInstances<IDataAdapter<ObjT>>()[0];
+
+        adapter.Session = this;
+
+        adapters.Add(adapterId, adapter);
+      }
+
+      return adapters[adapterId] as IDataAdapter<ObjT>;
+    }
+
+    public T GetDataAdapter<ObjT, T>()
+      where ObjT : IPersistableObject
+      where T : class, IDataAdapter<ObjT>
+    {
+      CheckThread();
+
+      Guid adapterId = typeof(T).GUID;
+
+      if (!adapters.ContainsKey(adapterId)) {
+        T adapter =
+          discoveryService.GetInstances<T>()[0];
+
+        adapter.Session = this;
+
+        adapters.Add(adapterId, adapter);
+      }
+
+      return adapters[adapterId] as T;
+    }
+
+    public void EndSession() {
+      CheckThread();
+
+      if (transaction != null) {
+        transaction.Rollback();
+        transaction = null;
+      }
+      if (connection.State == System.Data.ConnectionState.Open) {
+        connection.Close();
+        connection = null;
+      }
+      factory.EndSession(this);
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/SessionFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/SessionFactory.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/SessionFactory.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.DataAccess.Interfaces;
+using System.Threading;
+using System.Timers;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class SessionFactory: ISessionFactory {
+    private IDictionary<Thread, ISession> sessions =
+      new Dictionary<Thread, ISession>();
+
+    public Type DbConnectionType { get;  set; }
+    public String DbConnectionString { get;  set; }
+
+    public SessionFactory() {
+      System.Timers.Timer timer =
+        new System.Timers.Timer();
+
+      TimeSpan interval =
+        new TimeSpan(0, 1, 0);
+
+      timer.Interval = interval.TotalMilliseconds;
+      timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+    }
+
+    void timer_Elapsed(object sender, ElapsedEventArgs e) {
+      lock (this) {
+        ICollection<Thread> toBeRemoved =
+          new List<Thread>();
+
+        foreach (Thread t in sessions.Keys) {
+          if (t.ThreadState == ThreadState.Stopped) {
+            toBeRemoved.Add(t);
+          }
+        }
+
+        foreach (Thread t in toBeRemoved) {
+          sessions.Remove(t);
+        }
+      }
+    }
+
+    public DbConnection CreateConnection() {
+      DbConnection conn = 
+        Activator.CreateInstance(DbConnectionType) as DbConnection;
+
+      conn.ConnectionString = DbConnectionString;
+
+      return conn;
+    }
+
+    #region ISessionFactory Members
+
+    public ISession GetSessionForCurrentThread() {
+      lock (this) {
+        Thread current = Thread.CurrentThread;
+
+        if (!sessions.ContainsKey(current)) {
+          sessions[current] =
+            new Session(this);
+        }
+
+        return sessions[current];
+      }
+    }
+
+    public void EndSession(ISession session) {
+      lock (this) {
+        ICollection<Thread> toBeRemoved =
+          new List<Thread>();
+
+        foreach(Thread t in sessions.Keys) {
+          if(sessions[t].Equals(session)) {
+            toBeRemoved.Add(t);
+          }
+        }
+
+        foreach (Thread t in toBeRemoved) {
+          sessions.Remove(t);
+        }
+      }
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Transaction.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Transaction.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Transaction.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.DataAccess.Interfaces;
+using System.Data;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  class Transaction: ITransaction {
+    private DbTransaction transaction;
+
+    private Session session;
+
+    public Transaction(Session session) {
+      this.session = session;
+    }
+
+    public DbConnection Connection {
+      set {
+        if (value != null &&
+          (transaction == null ||
+           !(transaction.Connection != null &&
+             transaction.Connection.Equals(value)))) {
+          if (value.State != System.Data.ConnectionState.Open)
+            value.Open();
+
+          transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+        }
+      }
+    }
+
+    #region ITransaction Members
+    public void Commit() {
+      this.session.CheckThread();
+
+      if (transaction != null) {
+        DbConnection conn =
+          transaction.Connection;
+
+        transaction.Commit();
+
+        transaction = null;
+        session.DetachTrasaction();
+
+        if (conn != null && 
+            conn.State == System.Data.ConnectionState.Open)
+          conn.Close();
+      }
+    }
+
+    public void Rollback() {
+      this.session.CheckThread();
+
+      if (transaction != null) {
+        DbConnection conn =
+            transaction.Connection;
+
+        transaction.Rollback();
+
+        transaction = null;
+        session.DetachTrasaction();
+
+        if (conn != null &&
+            conn.State == System.Data.ConnectionState.Open)
+          conn.Close();
+      }
+    }
+
+    public object InnerTransaction {
+      get {
+        this.session.CheckThread();
+
+        return transaction;
+      }
+    }
+
+    #endregion
+  }
+}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/BinaryRelation.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/BinaryRelation.cs	(revision 1528)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.DataAccess.Interfaces;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public class BinaryRelation: PersistableObject {
-    public Guid Id2 { get; set; }
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/BinaryRelationHelper.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/BinaryRelationHelper.cs	(revision 1528)
+++ 	(revision )
@@ -1,93 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public class BinaryRelationHelper<AdapterT, RowT>
-    where AdapterT : new()
-    where RowT : System.Data.DataRow
-    {
-    IDataAdapterWrapper<AdapterT, BinaryRelation, RowT> tableAdapterWrapper;
-    
-    public BinaryRelationHelper(
-      IDataAdapterWrapper<AdapterT, BinaryRelation, RowT> tableAdapterWrapper) {
-      this.tableAdapterWrapper = tableAdapterWrapper;
-    }
-
-    public Session Session {
-      set {
-        tableAdapterWrapper.Session = value;
-      }
-    }
-
-    public void UpdateRelationships(Guid objectA, IList<Guid> relationships) {
-      //firstly check for created references
-      IList<Guid> existing =
-        this.GetRelationships(objectA);
-
-      foreach (Guid relationship in relationships) {
-        if (!existing.Contains(relationship)) {
-          BinaryRelation rel = 
-            new BinaryRelation();
-          rel.Id = objectA;
-          rel.Id2 = relationship;
-          
-          RowT inserted = 
-            tableAdapterWrapper.InsertNewRow(rel);
-
-          tableAdapterWrapper.UpdateRow(inserted);
-        }
-      }
-
-      //secondly check for deleted references
-      ICollection<Guid> deleted =
-        new List<Guid>();
-
-      foreach (Guid relationship in existing) {
-        if(!relationships.Contains(relationship)) {
-          deleted.Add(relationship);
-        }
-      }
-
-      foreach (Guid relationship in deleted) {
-        RowT toDelete =
-          FindRow(objectA, relationship);
-        if (toDelete != null) {
-          toDelete.Delete();
-          tableAdapterWrapper.UpdateRow(toDelete);
-        }
-      }
-    }
-
-    public IList<Guid> GetRelationships(Guid objectA) {
-      IList<Guid> result =
-        new List<Guid>();
-
-      IEnumerable<RowT> rows = 
-        tableAdapterWrapper.FindById(objectA);
-
-      foreach(RowT row in rows) {
-        result.Add((Guid)row[1]);
-      }
-
-      return result;
-    }
-
-    private RowT FindRow(Guid objectA, Guid objectB) {
-      IEnumerable<RowT> rows =
-       tableAdapterWrapper.FindById(objectA);
-
-      RowT found = null;
-
-      foreach (RowT row in rows) {
-        if (row[1].Equals(objectB)) {
-          found = row;
-          break;
-        }
-      }
-
-      return found;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/DataAccessADOHelperPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/DataAccessADOHelperPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.DataAccess.ADOHelper {
-  [ClassInfo(Name = "HeuristicLab.DataAccess.ADOHelper-3.2")]
-  [PluginFile(Filename = "HeuristicLab.DataAccess.ADOHelper-3.2.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  public class DataAccessADOHelperPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/DataAdapterBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/DataAdapterBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,294 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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.Text;
-using System.Linq;
-using System.Threading;
-using HeuristicLab.DataAccess.Interfaces;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public abstract class DataAdapterBase<AdapterT, ObjT, RowT>
-    where AdapterT : new()
-    where RowT : System.Data.DataRow
-    where ObjT : IPersistableObject, new() {
-
-    private ISession session;
-
-    private IDataAdapterWrapper<AdapterT, ObjT, RowT> dataAdapter;
-
-    protected DataAdapterBase(
-      IDataAdapterWrapper<AdapterT, ObjT, RowT> dataAdapter) {
-      this.dataAdapter = dataAdapter;
-    }
-
-    protected AdapterT Adapter {
-      get {
-        return dataAdapter.TransactionalAdapter;
-      }
-    }
-
-    protected IDataAdapterWrapper<AdapterT, ObjT, RowT> DataAdapterWrapper {
-      get {
-        return dataAdapter;
-      }
-    }
-
-    public ISession Session {
-      get {
-        return this.session;
-      }
-
-      set {
-        if (!(value is Session))
-          throw new Exception("Can only bind to ADO session");
-
-        this.session = value;
-        this.dataAdapter.Session = value as Session;
-      }
-    }
-
-    public object InnerAdapter {
-      get {
-        return this.Adapter;
-      }
-    }
-
-    #region Abstract methods
-    protected abstract RowT ConvertObj(ObjT obj, RowT row);
-
-    protected abstract ObjT ConvertRow(RowT row, ObjT obj);
-    #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 RowT FindSingleRow(Selector selector) {
-      RowT row = default(RowT);
-
-      IEnumerable<RowT> found =
-        selector();
-
-      if (found.Count<RowT>() == 1)
-        row = found.First<RowT>();
-
-      return row;
-    }
-
-    protected ObjT FindSingle(Selector selector) {
-      ITransaction trans =
-       session.GetCurrentTransaction();
-      bool transactionExists = trans != null;
-      if (!transactionExists) {
-        trans = session.BeginTransaction();
-      }
-
-      try {
-        RowT row = FindSingleRow(selector);
-
-        ObjT result;
-        if (row != null) {
-          ObjT obj = new ObjT();
-          obj = Convert(row, obj);
-
-          result = obj;
-        } else {
-          result = default(ObjT);
-        }
-
-        return result;
-      }
-      finally {
-        if (!transactionExists && trans != null) {
-          trans.Commit();
-        }
-      }
-    }
-
-    protected ICollection<ObjT> FindMultiple(Selector selector) {
-      ITransaction trans =
-       session.GetCurrentTransaction();
-      bool transactionExists = trans != null;
-      if (!transactionExists) {
-        trans = session.BeginTransaction();
-      }
-
-      try {
-        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;
-      }
-      finally {
-        if (!transactionExists && trans != null) {
-          trans.Commit();
-        }
-      }     
-    }
-
-    protected virtual RowT GetRowById(Guid id) {
-      return FindSingleRow(
-        delegate() {
-          return dataAdapter.FindById(id);
-        });
-    }
-
-    protected virtual void doUpdate(ObjT obj) {
-      if (obj != null) {
-        RowT row = null;
-
-        if (obj.Id != Guid.Empty) {
-          row = GetRowById(obj.Id);
-        } else {
-          obj.Id = Guid.NewGuid();
-        }
-
-        if (row == null) {
-          row = dataAdapter.InsertNewRow(obj);
-        }
-
-        ConvertObj(obj, row);
-        dataAdapter.UpdateRow(row);
-      }
-    }
-
-    public void Update(ObjT obj) {
-      ITransaction trans =
-        session.GetCurrentTransaction();
-      bool transactionExists = trans != null;
-      if (!transactionExists) {
-        trans = session.BeginTransaction();
-      }
-
-      try {
-        doUpdate(obj);
-      }
-      catch (DBConcurrencyException ex) {
-        DataRow row = ex.Row;
-
-        RowT current = GetRowById(obj.Id);
-        if (current != null) {
-          //find out changes
-          for (int i = 0; i < row.ItemArray.Length; i++) {            
-            if (!row[i, DataRowVersion.Current].Equals(
-                 row[i, DataRowVersion.Original])) {
-              current[i] = row[i];
-            }
-          }
-
-          ConvertRow(current, obj);
-          //try updating again
-          Update(obj);
-        }
-        //otherwise: row was deleted in the meantime - nothing to do
-      }
-      finally {
-        if (!transactionExists && trans != null) {
-          trans.Commit();
-        }
-      }
-    }
-
-    public virtual ObjT GetById(Guid id) {
-      return FindSingle(delegate() {
-        return dataAdapter.FindById(id);
-      });
-    }
-
-    public virtual ICollection<ObjT> GetAll() {
-      return new List<ObjT>(
-        FindMultiple(
-          new Selector(dataAdapter.FindAll)));
-    }
-
-    protected virtual bool doDelete(ObjT obj) {
-      bool success = false;
-
-      if (obj != null) {
-        RowT row =
-          GetRowById(obj.Id);
-
-        if (row != null) {
-          row.Delete();
-          dataAdapter.UpdateRow(row);
-
-          success = true;
-        }
-      }
-
-      return success;
-    }
-
-    public bool Delete(ObjT obj) {
-      ITransaction trans =
-        session.GetCurrentTransaction();
-      bool transactionExists = trans != null;
-      if (!transactionExists) {
-        trans = session.BeginTransaction();
-      }
-
-      try {
-        return doDelete(obj);
-      }
-      catch (DBConcurrencyException) {
-        RowT current = GetRowById(obj.Id);
-        if (current != null) {
-          ConvertRow(current, obj);
-          //try deleting again
-          return Delete(obj);
-        } else {
-          //row has already been deleted
-          return false;
-        }
-      }
-      finally {
-        if (!transactionExists && trans != null) {
-          trans.Commit();
-        }
-      }  
-    }
-  }
-}
-
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/DataAdapterWrapperBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/DataAdapterWrapperBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,80 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAccess.Interfaces;
-using System.Data.Common;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public abstract class DataAdapterWrapperBase<AdapterT, ObjT, RowT>:
-    IDataAdapterWrapper<AdapterT, ObjT, RowT>
-    where AdapterT : new()
-    where ObjT : IPersistableObject, new()
-    where RowT : System.Data.DataRow {
-    protected AdapterT adapter =
-      new AdapterT();
-
-    private ISession session;
-    
-    #region IDataAdapterWrapper<AdapterT,ObjT,RowT> Members
-
-    public AdapterT TransactionalAdapter {
-      get {
-        if (session == null)
-          throw new Exception("No session set!");
-
-        ITransaction trans =
-          session.GetCurrentTransaction();
-        if (trans != null)
-          SetTransaction(trans.InnerTransaction as DbTransaction);
-        else
-          SetTransaction(null);
-
-        return this.adapter; 
-      }
-    }
-
-    public Session Session {
-      set { 
-        this.session = value;
-
-        SetConnection(value.Connection); 
-      }
-    }
-
-    public abstract void UpdateRow(RowT row);
-
-    public abstract RowT InsertNewRow(ObjT obj);
-
-    public abstract IEnumerable<RowT> FindById(Guid id);
-
-    public abstract IEnumerable<RowT> FindAll();
-
-    protected abstract void SetConnection(DbConnection connection);
-
-    protected abstract void SetTransaction(DbTransaction transaction);
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/HeuristicLab.DataAccess.ADOHelper.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/HeuristicLab.DataAccess.ADOHelper.csproj	(revision 1528)
+++ 	(revision )
@@ -1,125 +1,0 @@
-﻿<?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>{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.DataAccess.ADOHelper</RootNamespace>
-    <AssemblyName>HeuristicLab.DataAccess.ADOHelper-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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <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>
-    <None Include="HeuristicLab.snk" />
-    <None Include="Properties\AssemblyInfo.frame" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="DataAccessADOHelperPlugin.cs" />
-    <Compile Include="DataAdapterBase.cs" />
-    <Compile Include="DataAdapterWrapperBase.cs" />
-    <Compile Include="IDataAdapterWrapper.cs" />
-    <Compile Include="BinaryRelation.cs" />
-    <Compile Include="BinaryRelationHelper.cs" />
-    <Compile Include="Session.cs" />
-    <Compile Include="SessionFactory.cs" />
-    <Compile Include="Transaction.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\HeuristicLab.DataAccess\HeuristicLab.DataAccess.csproj">
-      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
-      <Name>HeuristicLab.DataAccess</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
-      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
-      <Name>HeuristicLab.PluginInfrastructure</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data" />
-    <Reference Include="System.Data.DataSetExtensions">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.Linq">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.XML" />
-  </ItemGroup>
-  <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
-set ProjectDir=$(ProjectDir)
-set SolutionDir=$(SolutionDir)
-set Outdir=$(Outdir)
-
-call PreBuildEvent.cmd</PreBuildEvent>
-  </PropertyGroup>
-</Project>
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/IDataAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/IDataAdapterWrapper.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAccess.Interfaces;
-using System.Data.Common;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public interface IDataAdapterWrapper<AdapterT, ObjT, RowT>
-   where AdapterT : new()
-   where ObjT : IPersistableObject, new()
-   where RowT : System.Data.DataRow {
-    void UpdateRow(RowT row);
-
-    RowT InsertNewRow(ObjT obj);
-
-    IEnumerable<RowT> FindById(Guid id);
-
-    IEnumerable<RowT> FindAll();
-
-    AdapterT TransactionalAdapter { get; }
-
-    Session Session { set; }
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/Session.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/Session.cs	(revision 1528)
+++ 	(revision )
@@ -1,144 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAccess.Interfaces;
-using HeuristicLab.PluginInfrastructure;
-using System.Data.Common;
-using System.Threading;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public class Session: ISession {
-    private static DiscoveryService discoveryService =
-      new DiscoveryService();
-
-    private SessionFactory factory;
-
-    private Transaction transaction;
-
-    private DbConnection connection;
-
-    private Thread ownerThread;
-
-    private IDictionary<Guid, object> adapters =
-      new Dictionary<Guid, object>();
-
-    public Session(SessionFactory factory) {
-      this.factory = factory;
-      this.ownerThread = Thread.CurrentThread;
-    }
-
-    public void CheckThread() {
-      if (!Thread.CurrentThread.Equals(ownerThread)) {
-        throw new Exception("Session is owned by another thread");
-      }
-    }
-
-    public DbConnection Connection {
-      get {
-        if (connection == null) {
-          connection = factory.CreateConnection();
-        }
-
-        return connection;
-      }
-    }
-
-    public void DetachTrasaction() {
-      this.transaction = null;
-    }
-
-    #region ISession Members
-    public ITransaction BeginTransaction() {
-      CheckThread();
-
-      if (transaction == null) {
-         transaction = new Transaction(this);
-         transaction.Connection = Connection;
-      }
-
-      return transaction;
-    }
-
-    public ITransaction GetCurrentTransaction() {
-      CheckThread();
-
-      return transaction;
-    }
-
-    public IDataAdapter<ObjT> GetDataAdapter<ObjT>()
-      where ObjT : IPersistableObject {
-      CheckThread();
-
-      Guid adapterId = typeof(IDataAdapter<ObjT>).GUID;
-
-      if (!adapters.ContainsKey(adapterId)) {
-        IDataAdapter<ObjT> adapter =
-          discoveryService.GetInstances<IDataAdapter<ObjT>>()[0];
-
-        adapter.Session = this;
-
-        adapters.Add(adapterId, adapter);
-      }
-
-      return adapters[adapterId] as IDataAdapter<ObjT>;
-    }
-
-    public T GetDataAdapter<ObjT, T>()
-      where ObjT : IPersistableObject
-      where T : class, IDataAdapter<ObjT>
-    {
-      CheckThread();
-
-      Guid adapterId = typeof(T).GUID;
-
-      if (!adapters.ContainsKey(adapterId)) {
-        T adapter =
-          discoveryService.GetInstances<T>()[0];
-
-        adapter.Session = this;
-
-        adapters.Add(adapterId, adapter);
-      }
-
-      return adapters[adapterId] as T;
-    }
-
-    public void EndSession() {
-      CheckThread();
-
-      if (transaction != null) {
-        transaction.Rollback();
-        transaction = null;
-      }
-      if (connection.State == System.Data.ConnectionState.Open) {
-        connection.Close();
-        connection = null;
-      }
-      factory.EndSession(this);
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/SessionFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/SessionFactory.cs	(revision 1528)
+++ 	(revision )
@@ -1,111 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAccess.Interfaces;
-using System.Threading;
-using System.Timers;
-using System.Data.Common;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  public class SessionFactory: ISessionFactory {
-    private IDictionary<Thread, ISession> sessions =
-      new Dictionary<Thread, ISession>();
-
-    public Type DbConnectionType { get;  set; }
-    public String DbConnectionString { get;  set; }
-
-    public SessionFactory() {
-      System.Timers.Timer timer =
-        new System.Timers.Timer();
-
-      TimeSpan interval =
-        new TimeSpan(0, 1, 0);
-
-      timer.Interval = interval.TotalMilliseconds;
-      timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
-      timer.Start();
-    }
-
-    void timer_Elapsed(object sender, ElapsedEventArgs e) {
-      lock (this) {
-        ICollection<Thread> toBeRemoved =
-          new List<Thread>();
-
-        foreach (Thread t in sessions.Keys) {
-          if (t.ThreadState == ThreadState.Stopped) {
-            toBeRemoved.Add(t);
-          }
-        }
-
-        foreach (Thread t in toBeRemoved) {
-          sessions.Remove(t);
-        }
-      }
-    }
-
-    public DbConnection CreateConnection() {
-      DbConnection conn = 
-        Activator.CreateInstance(DbConnectionType) as DbConnection;
-
-      conn.ConnectionString = DbConnectionString;
-
-      return conn;
-    }
-
-    #region ISessionFactory Members
-
-    public ISession GetSessionForCurrentThread() {
-      lock (this) {
-        Thread current = Thread.CurrentThread;
-
-        if (!sessions.ContainsKey(current)) {
-          sessions[current] =
-            new Session(this);
-        }
-
-        return sessions[current];
-      }
-    }
-
-    public void EndSession(ISession session) {
-      lock (this) {
-        ICollection<Thread> toBeRemoved =
-          new List<Thread>();
-
-        foreach(Thread t in sessions.Keys) {
-          if(sessions[t].Equals(session)) {
-            toBeRemoved.Add(t);
-          }
-        }
-
-        foreach (Thread t in toBeRemoved) {
-          sessions.Remove(t);
-        }
-      }
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess.ADOHelper/Transaction.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/Transaction.cs	(revision 1528)
+++ 	(revision )
@@ -1,101 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAccess.Interfaces;
-using System.Data;
-using System.Data.Common;
-
-namespace HeuristicLab.DataAccess.ADOHelper {
-  class Transaction: ITransaction {
-    private DbTransaction transaction;
-
-    private Session session;
-
-    public Transaction(Session session) {
-      this.session = session;
-    }
-
-    public DbConnection Connection {
-      set {
-        if (value != null &&
-          (transaction == null ||
-           !(transaction.Connection != null &&
-             transaction.Connection.Equals(value)))) {
-          if (value.State != System.Data.ConnectionState.Open)
-            value.Open();
-
-          transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
-        }
-      }
-    }
-
-    #region ITransaction Members
-    public void Commit() {
-      this.session.CheckThread();
-
-      if (transaction != null) {
-        DbConnection conn =
-          transaction.Connection;
-
-        transaction.Commit();
-
-        transaction = null;
-        session.DetachTrasaction();
-
-        if (conn != null && 
-            conn.State == System.Data.ConnectionState.Open)
-          conn.Close();
-      }
-    }
-
-    public void Rollback() {
-      this.session.CheckThread();
-
-      if (transaction != null) {
-        DbConnection conn =
-            transaction.Connection;
-
-        transaction.Rollback();
-
-        transaction = null;
-        session.DetachTrasaction();
-
-        if (conn != null &&
-            conn.State == System.Data.ConnectionState.Open)
-          conn.Close();
-      }
-    }
-
-    public object InnerTransaction {
-      get {
-        this.session.CheckThread();
-
-        return transaction;
-      }
-    }
-
-    #endregion
-  }
-}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/DataAccessPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/DataAccessPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/DataAccessPlugin.cs	(revision 1529)
@@ -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.DataAccess {
+  [ClassInfo(Name = "HeuristicLab.DataAccess-3.2")]
+  [PluginFile(Filename = "HeuristicLab.DataAccess-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class DataAccessPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/HeuristicLab.DataAccess.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/HeuristicLab.DataAccess.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/HeuristicLab.DataAccess.csproj	(revision 1529)
@@ -0,0 +1,164 @@
+﻿<?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>{9076697B-C151-46CD-95BC-1D059492B478}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.DataAccess-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <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>
+    <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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <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>
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="DataAccessPlugin.cs" />
+    <Compile Include="Interfaces\ISession.cs" />
+    <Compile Include="Interfaces\ISessionFactory.cs" />
+    <Compile Include="Interfaces\ITransaction.cs" />
+    <Compile Include="Interfaces\ITransactionManager.cs" />
+    <Compile Include="PersistableObject.cs" />
+    <Compile Include="Interfaces\IDataAdapter.cs" />
+    <Compile Include="Interfaces\IPersistableObject.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>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/HeuristicLab.DataAccess.csproj.user
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/HeuristicLab.DataAccess.csproj.user	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/HeuristicLab.DataAccess.csproj.user	(revision 1529)
@@ -0,0 +1,17 @@
+﻿<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <PublishUrlHistory>publish\</PublishUrlHistory>
+    <InstallUrlHistory>
+    </InstallUrlHistory>
+    <SupportUrlHistory>
+    </SupportUrlHistory>
+    <UpdateUrlHistory>
+    </UpdateUrlHistory>
+    <BootstrapperUrlHistory>
+    </BootstrapperUrlHistory>
+    <ErrorReportUrlHistory>
+    </ErrorReportUrlHistory>
+    <FallbackCulture>en-US</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/IDataAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/IDataAdapter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/IDataAdapter.cs	(revision 1529)
@@ -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;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface IDataAdapter<ObjT>
+    where ObjT: IPersistableObject
+  {
+    /// <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(Guid id);
+
+    /// <summary>
+    /// Get all objects
+    /// </summary>
+    /// <returns></returns>
+    ICollection<ObjT> GetAll();
+
+    /// <summary>
+    /// Deletes the object
+    /// </summary>
+    /// <param name="user"></param>
+    bool Delete(ObjT obj);
+
+    /// <summary>
+    /// sets the session
+    /// </summary>
+    ISession Session { set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/IPersistableObject.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/IPersistableObject.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/IPersistableObject.cs	(revision 1529)
@@ -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;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface IPersistableObject {
+    Guid Id { get; set;  }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISession.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISession.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISession.cs	(revision 1529)
@@ -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.DataAccess.Interfaces {
+  public interface ISession {
+    ITransaction BeginTransaction();
+
+    ITransaction GetCurrentTransaction();
+
+    IDataAdapter<ObjT> GetDataAdapter<ObjT>()
+      where ObjT : IPersistableObject;
+
+    T GetDataAdapter<ObjT, T>()
+      where ObjT : IPersistableObject
+      where T : class, IDataAdapter<ObjT>;
+
+    void EndSession();
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISessionFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISessionFactory.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISessionFactory.cs	(revision 1529)
@@ -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;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface ISessionFactory {
+    ISession GetSessionForCurrentThread();
+
+    Type DbConnectionType { set; }
+    String DbConnectionString { set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ITransaction.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ITransaction.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ITransaction.cs	(revision 1529)
@@ -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;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface ITransaction {
+    void Commit();
+    void Rollback();
+
+    object InnerTransaction { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ITransactionManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ITransactionManager.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ITransactionManager.cs	(revision 1529)
@@ -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.DataAccess.Interfaces {
+  public interface ITransactionManager {
+    ITransaction BeginTransaction();
+    ITransaction GetTransactionForCurrentThread(); 
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/PersistableObject.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/PersistableObject.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/PersistableObject.cs	(revision 1529)
@@ -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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.DataAccess {
+  [DataContract]
+  public class PersistableObject: IPersistableObject {
+    [DataMember]
+      public Guid Id { get; set; }
+
+    public override bool Equals(object obj) {
+      if (obj is IPersistableObject)
+        return this.Id.Equals(
+          (obj as IPersistableObject).Id);
+      else
+        return base.Equals(obj);
+    }
+
+    public override int GetHashCode() {
+      return this.Id.GetHashCode();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.DataAccess")]
+[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("EC1415CC-94EF-4786-9811-41881787FF4E")]
+
+// 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: unk/sources/HeuristicLab.DataAccess/DataAccessPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/DataAccessPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.DataAccess {
-  [ClassInfo(Name = "HeuristicLab.DataAccess-3.2")]
-  [PluginFile(Filename = "HeuristicLab.DataAccess-3.2.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  public class DataAccessPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.DataAccess/HeuristicLab.DataAccess.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/HeuristicLab.DataAccess.csproj	(revision 1528)
+++ 	(revision )
@@ -1,164 +1,0 @@
-﻿<?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>{9076697B-C151-46CD-95BC-1D059492B478}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.DataAccess</RootNamespace>
-    <AssemblyName>HeuristicLab.DataAccess-3.2</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <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>
-    <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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <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>
-    <None Include="Properties\AssemblyInfo.frame" />
-    <None Include="HeuristicLab.snk" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="DataAccessPlugin.cs" />
-    <Compile Include="Interfaces\ISession.cs" />
-    <Compile Include="Interfaces\ISessionFactory.cs" />
-    <Compile Include="Interfaces\ITransaction.cs" />
-    <Compile Include="Interfaces\ITransactionManager.cs" />
-    <Compile Include="PersistableObject.cs" />
-    <Compile Include="Interfaces\IDataAdapter.cs" />
-    <Compile Include="Interfaces\IPersistableObject.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>
-  <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
-set ProjectDir=$(ProjectDir)
-set SolutionDir=$(SolutionDir)
-set Outdir=$(Outdir)
-
-call PreBuildEvent.cmd</PreBuildEvent>
-  </PropertyGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Runtime.Serialization">
-      <RequiredTargetFramework>3.0</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-</Project>
Index: unk/sources/HeuristicLab.DataAccess/HeuristicLab.DataAccess.csproj.user
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/HeuristicLab.DataAccess.csproj.user	(revision 1528)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <PublishUrlHistory>publish\</PublishUrlHistory>
-    <InstallUrlHistory>
-    </InstallUrlHistory>
-    <SupportUrlHistory>
-    </SupportUrlHistory>
-    <UpdateUrlHistory>
-    </UpdateUrlHistory>
-    <BootstrapperUrlHistory>
-    </BootstrapperUrlHistory>
-    <ErrorReportUrlHistory>
-    </ErrorReportUrlHistory>
-    <FallbackCulture>en-US</FallbackCulture>
-    <VerifyUploadedFiles>false</VerifyUploadedFiles>
-  </PropertyGroup>
-</Project>
Index: unk/sources/HeuristicLab.DataAccess/PersistableObject.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/PersistableObject.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.Runtime.Serialization;
-using HeuristicLab.DataAccess.Interfaces;
-
-namespace HeuristicLab.DataAccess {
-  [DataContract]
-  public class PersistableObject: IPersistableObject {
-    [DataMember]
-      public Guid Id { get; set; }
-
-    public override bool Equals(object obj) {
-      if (obj is IPersistableObject)
-        return this.Id.Equals(
-          (obj as IPersistableObject).Id);
-      else
-        return base.Equals(obj);
-    }
-
-    public override int GetHashCode() {
-      return this.Id.GetHashCode();
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.DataAnalysis/3.2/DataFormatException.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/DataFormatException.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/DataFormatException.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs	(revision 1529)
@@ -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.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;
+        if (variableNames == null || variableNames.Length != columns) {
+          variableNames = new string[columns];
+        }
+      }
+    }
+
+    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 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 string GetVariableName(int variableIndex) {
+      return variableNames[variableIndex];
+    }
+
+    public void SetVariableName(int variableIndex, string name) {
+      variableNames[variableIndex] = name;
+    }
+
+
+    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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetParser.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetParser.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetShuffler.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetShuffler.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetShuffler.cs	(revision 1529)
@@ -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 HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.DataAnalysis {
+  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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.cs	(revision 1529)
@@ -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.Columns == dataGridView.Columns.Count) {
+        return Dataset.GetVariableName(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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.resx
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/HeuristicLab.DataAnalysis.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/HeuristicLab.DataAnalysis.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/HeuristicLab.DataAnalysis.csproj	(revision 1529)
@@ -0,0 +1,160 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.DataAnalysis-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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="DatasetShuffler.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.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>
+    <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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/HeuristicLabDataAnalysisPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/HeuristicLabDataAnalysisPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/HeuristicLabDataAnalysisPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/IDatasetManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/IDatasetManipulator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/IDatasetManipulator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/ManualScalingControl.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DataAnalysis/3.2/Statistics.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/Statistics.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/Statistics.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.DataAnalysis/DataFormatException.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/DataFormatException.cs	(revision 1528)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.DataAnalysis/Dataset.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/Dataset.cs	(revision 1528)
+++ 	(revision )
@@ -1,349 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-        if (variableNames == null || variableNames.Length != columns) {
-          variableNames = new string[columns];
-        }
-      }
-    }
-
-    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 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 string GetVariableName(int variableIndex) {
-      return variableNames[variableIndex];
-    }
-
-    public void SetVariableName(int variableIndex, string name) {
-      variableNames[variableIndex] = name;
-    }
-
-
-    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: unk/sources/HeuristicLab.DataAnalysis/DatasetParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/DatasetParser.cs	(revision 1528)
+++ 	(revision )
@@ -1,414 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.DataAnalysis/DatasetShuffler.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/DatasetShuffler.cs	(revision 1528)
+++ 	(revision )
@@ -1,58 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.DataAnalysis {
-  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: unk/sources/HeuristicLab.DataAnalysis/DatasetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/DatasetView.cs	(revision 1528)
+++ 	(revision )
@@ -1,171 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received 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.Columns == dataGridView.Columns.Count) {
-        return Dataset.GetVariableName(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: unk/sources/HeuristicLab.DataAnalysis/DatasetView.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/DatasetView.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,212 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.DataAnalysis/DatasetView.resx
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/DatasetView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1528)
+++ 	(revision )
@@ -1,160 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.DataAnalysis-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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="DatasetShuffler.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.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>
-    <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: unk/sources/HeuristicLab.DataAnalysis/HeuristicLabDataAnalysisPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/HeuristicLabDataAnalysisPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,34 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.DataAnalysis/IDatasetManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/IDatasetManipulator.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.DataAnalysis/ManualScalingControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/ManualScalingControl.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,88 +1,0 @@
-﻿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: unk/sources/HeuristicLab.DataAnalysis/ManualScalingControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/ManualScalingControl.cs	(revision 1528)
+++ 	(revision )
@@ -1,115 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.DataAnalysis/ManualScalingControl.resx
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/ManualScalingControl.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.DataAnalysis/Statistics.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/Statistics.cs	(revision 1528)
+++ 	(revision )
@@ -1,243 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU 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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngine.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngine.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/DistributedEngineEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/HeuristicLab.DistributedEngine.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/HeuristicLab.DistributedEngine.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/HeuristicLab.DistributedEngine.csproj	(revision 1529)
@@ -0,0 +1,138 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.DistributedEngine-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/HeuristicLabDistributedEnginePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/HeuristicLabDistributedEnginePlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/HeuristicLabDistributedEnginePlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.DistributedEngine/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.DistributedEngine/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: unk/sources/HeuristicLab.DistributedEngine/DistributedEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/DistributedEngine.cs	(revision 1528)
+++ 	(revision )
@@ -1,348 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.DistributedEngine/DistributedEngineEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/DistributedEngineEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,121 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.DistributedEngine/DistributedEngineEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/DistributedEngineEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,61 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.DistributedEngine/DistributedEngineEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/DistributedEngineEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.DistributedEngine/HeuristicLab.DistributedEngine.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/HeuristicLab.DistributedEngine.csproj	(revision 1528)
+++ 	(revision )
@@ -1,138 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.DistributedEngine-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.DistributedEngine/HeuristicLabDistributedEnginePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.DistributedEngine/HeuristicLabDistributedEnginePlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,34 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.ES/3.2/ES.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/ES.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/ES.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/ESEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/ESEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/ESEditor.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/ESEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/ESEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/ESEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/ESEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/ESEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/ESEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/ESRandomSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/ESRandomSelector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/ESRandomSelector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/HeuristicLab.ES.csproj
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/HeuristicLab.ES.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/HeuristicLab.ES.csproj	(revision 1529)
@@ -0,0 +1,164 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.ES-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.ES/3.2/HeuristicLabESPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/HeuristicLabESPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/HeuristicLabESPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/SelfAdaptiveMutationStrengthAdjuster.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/SelfAdaptiveMutationStrengthAdjuster.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/SelfAdaptiveMutationStrengthAdjuster.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.ES/3.2/VariableStrengthRepeatingManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/3.2/VariableStrengthRepeatingManipulator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.ES/3.2/VariableStrengthRepeatingManipulator.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.ES/ES.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/ES.cs	(revision 1528)
+++ 	(revision )
@@ -1,710 +1,0 @@
-﻿#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: unk/sources/HeuristicLab.ES/ESEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/ESEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,924 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.ES/ESEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/ESEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,257 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.ES/ESEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.ES/ESEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,136 +1,0 @@
-<?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: unk/sources/HeuristicLab.ES/ESRandomSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/ESRandomSelector.cs	(revision 1528)
+++ 	(revision )
@@ -1,110 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.ES/HeuristicLab.ES.csproj
===================================================================
--- /trunk/sources/HeuristicLab.ES/HeuristicLab.ES.csproj	(revision 1528)
+++ 	(revision )
@@ -1,164 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.ES-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.ES/HeuristicLabESPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/HeuristicLabESPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.ES/SelfAdaptiveMutationStrengthAdjuster.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/SelfAdaptiveMutationStrengthAdjuster.cs	(revision 1528)
+++ 	(revision )
@@ -1,72 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs	(revision 1528)
+++ 	(revision )
@@ -1,72 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: /trunk/sources/HeuristicLab.Evolutionary/3.2/ChildrenInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/ChildrenInitializer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/ChildrenInitializer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/CrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/CrossoverBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/CrossoverBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLab.Evolutionary.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLab.Evolutionary.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLab.Evolutionary.csproj	(revision 1529)
@@ -0,0 +1,126 @@
+﻿<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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</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: /trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLabEvolutionaryPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLabEvolutionaryPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLabEvolutionaryPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/SASEGASAReunificator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/SASEGASAReunificator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/SASEGASAReunificator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/SubScopesStorer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/SubScopesStorer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/SubScopesStorer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/SuccessRuleMutationStrengthAdjuster.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/SuccessRuleMutationStrengthAdjuster.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/SuccessRuleMutationStrengthAdjuster.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Evolutionary/3.2/UnidirectionalRingMigrator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/3.2/UnidirectionalRingMigrator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Evolutionary/3.2/UnidirectionalRingMigrator.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Evolutionary/ChildrenInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/ChildrenInitializer.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-﻿#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: unk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-﻿<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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</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: unk/sources/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Evolutionary/SASEGASAReunificator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/SASEGASAReunificator.cs	(revision 1528)
+++ 	(revision )
@@ -1,80 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs	(revision 1528)
+++ 	(revision )
@@ -1,104 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs	(revision 1528)
+++ 	(revision )
@@ -1,90 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs	(revision 1528)
+++ 	(revision )
@@ -1,69 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/And.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/And.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/And.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Evaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Evaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Evaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/FunctionLibraryInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/FunctionLibraryInjector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean.csproj	(revision 1529)
@@ -0,0 +1,150 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs	(revision 1529)
@@ -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.Boolean {
+  [ClassInfo(Name = "HeuristicLab.GP.Boolean-3.3")]
+  [PluginFile(Filename = "HeuristicLab.GP.Boolean-3.3.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  public class HeuristicLabGPBooleanPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Nand.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Nand.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Nand.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Nor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Nor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Nor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Not.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Not.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Not.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Or.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Or.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Or.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.GP.Boolean/3.3/SymbolTable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/SymbolTable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/SymbolTable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Variable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Variable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.Boolean/3.3/Xor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/3.3/Xor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.Boolean/3.3/Xor.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.GP.Boolean/And.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/And.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.Boolean/BooleanTreeInterpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/BooleanTreeInterpreter.cs	(revision 1528)
+++ 	(revision )
@@ -1,77 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.Boolean/Evaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Evaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,57 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.Boolean/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/FunctionLibraryInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.GP.Boolean/HeuristicLab.GP.Boolean.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/HeuristicLab.GP.Boolean.csproj	(revision 1528)
+++ 	(revision )
@@ -1,150 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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: unk/sources/HeuristicLab.GP.Boolean/HeuristicLabGPBooleanPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/HeuristicLabGPBooleanPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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-3.3")]
-  [PluginFile(Filename = "HeuristicLab.GP.Boolean-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
-  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
-  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
-  public class HeuristicLabGPBooleanPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.GP.Boolean/Nand.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Nand.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.Boolean/Nor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Nor.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.Boolean/Not.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Not.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.Boolean/Or.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Or.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.Boolean/SymbolTable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/SymbolTable.cs	(revision 1528)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.Boolean/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Variable.cs	(revision 1528)
+++ 	(revision )
@@ -1,149 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.Boolean/Xor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Boolean/Xor.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/AntInterpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/AntInterpreter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/AntInterpreter.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Evaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Evaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Evaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/FunctionLibraryInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/FunctionLibraryInjector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/HeuristicLab.GP.SantaFe.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/HeuristicLab.GP.SantaFe.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/HeuristicLab.GP.SantaFe.csproj	(revision 1529)
@@ -0,0 +1,146 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/HeuristicLabGPSantaFePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/HeuristicLabGPSantaFePlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/HeuristicLabGPSantaFePlugin.cs	(revision 1529)
@@ -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.SantaFe {
+  [ClassInfo(Name = "HeuristicLab.GP.SantaFe-3.3")]
+  [PluginFile(Filename = "HeuristicLab.GP.SantaFe-3.3.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
+  [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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/IfFoodAhead.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/IfFoodAhead.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/IfFoodAhead.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Left.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Left.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Left.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Move.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Move.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Move.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Prog2.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Prog2.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Prog2.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Prog3.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Prog3.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Prog3.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Right.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Right.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/Right.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.SantaFe/3.3/SymbolTable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/3.3/SymbolTable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.SantaFe/3.3/SymbolTable.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.GP.SantaFe/AntInterpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/AntInterpreter.cs	(revision 1528)
+++ 	(revision )
@@ -1,159 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.SantaFe/Evaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/Evaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.SantaFe/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/FunctionLibraryInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,100 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.GP.SantaFe/HeuristicLab.GP.SantaFe.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/HeuristicLab.GP.SantaFe.csproj	(revision 1528)
+++ 	(revision )
@@ -1,146 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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: unk/sources/HeuristicLab.GP.SantaFe/HeuristicLabGPSantaFePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/HeuristicLabGPSantaFePlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.GP.SantaFe-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
-  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
-  [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: unk/sources/HeuristicLab.GP.SantaFe/IfFoodAhead.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/IfFoodAhead.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.SantaFe/Left.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/Left.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.SantaFe/Move.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/Move.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.SantaFe/Prog2.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/Prog2.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.SantaFe/Prog3.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/Prog3.cs	(revision 1528)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.SantaFe/Right.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/Right.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.SantaFe/SymbolTable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.SantaFe/SymbolTable.cs	(revision 1528)
+++ 	(revision )
@@ -1,56 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/AccuracyEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/AccuracyEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/AccuracyEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ClassificationMeanSquaredErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ClassificationMeanSquaredErrorEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ClassificationMeanSquaredErrorEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ConfusionMatrixEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ConfusionMatrixEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ConfusionMatrixEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/CrossValidation.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/CrossValidation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/CrossValidation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/GPClassificationEvaluatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/GPClassificationEvaluatorBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/GPClassificationEvaluatorBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLab.GP.StructureIdentification.Classification.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1529)
@@ -0,0 +1,154 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="GPClassificationEvaluatorBase.cs" />
+    <Compile Include="CrossValidation.cs" />
+    <Compile Include="HeuristicLabGPClassificationPlugin.cs" />
+    <Compile Include="MulticlassModeller.cs" />
+    <Compile Include="MulticlassOneVsOneAnalyzer.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="ProblemInjector.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ROCAnalyzer.cs" />
+    <Compile Include="StandardGP.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.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>
+    <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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLabGPClassificationPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLabGPClassificationPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLabGPClassificationPlugin.cs	(revision 1529)
@@ -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.3")]
+  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.Classification-3.3.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.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  public class HeuristicLabGPClassificationPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassModeller.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassModeller.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassModeller.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/OffspringSelectionGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/OffspringSelectionGP.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/OffspringSelectionGP.cs	(revision 1529)
@@ -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.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(StandardGP.BestSolutionProcessor);
+      return seq;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ProblemInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ProblemInjector.cs	(revision 1529)
@@ -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 Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class ProblemInjector : HeuristicLab.GP.StructureIdentification.ProblemInjector {
+
+    public override string Description {
+      get {
+        return "Problem injector for classification structure identification.";
+      }
+    }
+
+    public ProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("TargetClassValues", "TargetClassValues", typeof(ItemList<DoubleData>), Core.VariableKind.New));
+      GetVariableInfo("TargetClassValues").Local = true;
+      AddVariable(new Core.Variable("TargetClassValues", new ItemList<DoubleData>()));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ROCAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ROCAnalyzer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ROCAnalyzer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/StandardGP.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/StandardGP.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
+
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(BestSolutionProcessor);
+      return seq;
+    }
+
+    internal static IOperator BestSolutionProcessor {
+      get {
+        SequentialProcessor seq = new SequentialProcessor();
+        AccuracyEvaluator trainingAccuracy = new AccuracyEvaluator();
+        trainingAccuracy.GetVariableInfo("Accuracy").ActualName = "TrainingAccuracy";
+        trainingAccuracy.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+        AccuracyEvaluator validationAccuracy = new AccuracyEvaluator();
+        validationAccuracy.GetVariableInfo("Accuracy").ActualName = "ValidationAccuracy";
+        validationAccuracy.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationAccuracy.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+        AccuracyEvaluator testAccuracy = new AccuracyEvaluator();
+        testAccuracy.GetVariableInfo("Accuracy").ActualName = "TestAccuracy";
+        testAccuracy.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+        ConfusionMatrixEvaluator trainingConfusionMatrix = new ConfusionMatrixEvaluator();
+        trainingConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TrainingConfusionMatrix";
+        trainingConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+        ConfusionMatrixEvaluator validationConfusionMatrix = new ConfusionMatrixEvaluator();
+        validationConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "ValidationConfusionMatrix";
+        validationConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+        ConfusionMatrixEvaluator testConfusionMatrix = new ConfusionMatrixEvaluator();
+        testConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TestConfusionMatrix";
+        testConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+        seq.AddSubOperator(trainingAccuracy);
+        seq.AddSubOperator(validationAccuracy);
+        seq.AddSubOperator(testAccuracy);
+        seq.AddSubOperator(trainingConfusionMatrix);
+        seq.AddSubOperator(validationConfusionMatrix);
+        seq.AddSubOperator(testConfusionMatrix);
+        return seq;
+      }
+    }
+  }
+}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/AccuracyEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/AccuracyEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,82 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/ConfusionMatrixEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ConfusionMatrixEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,81 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/CrossValidation.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/CrossValidation.cs	(revision 1528)
+++ 	(revision )
@@ -1,115 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/GPClassificationEvaluatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/GPClassificationEvaluatorBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,55 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1528)
+++ 	(revision )
@@ -1,154 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="GPClassificationEvaluatorBase.cs" />
-    <Compile Include="CrossValidation.cs" />
-    <Compile Include="HeuristicLabGPClassificationPlugin.cs" />
-    <Compile Include="MulticlassModeller.cs" />
-    <Compile Include="MulticlassOneVsOneAnalyzer.cs" />
-    <Compile Include="OffspringSelectionGP.cs" />
-    <Compile Include="ProblemInjector.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ROCAnalyzer.cs" />
-    <Compile Include="StandardGP.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.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>
-    <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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLabGPClassificationPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLabGPClassificationPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.Classification-3.3.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.3")]
-  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
-  public class HeuristicLabGPClassificationPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/MulticlassModeller.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/MulticlassModeller.cs	(revision 1528)
+++ 	(revision )
@@ -1,150 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/MulticlassOneVsOneAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/MulticlassOneVsOneAnalyzer.cs	(revision 1528)
+++ 	(revision )
@@ -1,128 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Random;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
-    protected override IOperator CreateProblemInjector() {
-      return new ProblemInjector();
-    }
-
-    protected override IOperator CreateBestSolutionProcessor() {
-      IOperator seq = base.CreateBestSolutionProcessor();
-      seq.AddSubOperator(StandardGP.BestSolutionProcessor);
-      return seq;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/ProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ProblemInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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;
-
-namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class ProblemInjector : HeuristicLab.GP.StructureIdentification.ProblemInjector {
-
-    public override string Description {
-      get {
-        return "Problem injector for classification structure identification.";
-      }
-    }
-
-    public ProblemInjector()
-      : base() {
-      AddVariableInfo(new Core.VariableInfo("TargetClassValues", "TargetClassValues", typeof(ItemList<DoubleData>), Core.VariableKind.New));
-      GetVariableInfo("TargetClassValues").Local = true;
-      AddVariable(new Core.Variable("TargetClassValues", new ItemList<DoubleData>()));
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/ROCAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ROCAnalyzer.cs	(revision 1528)
+++ 	(revision )
@@ -1,245 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1528)
+++ 	(revision )
@@ -1,90 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Random;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
-
-    protected override IOperator CreateProblemInjector() {
-      return new ProblemInjector();
-    }
-
-    protected override IOperator CreateBestSolutionProcessor() {
-      IOperator seq = base.CreateBestSolutionProcessor();
-      seq.AddSubOperator(BestSolutionProcessor);
-      return seq;
-    }
-
-    internal static IOperator BestSolutionProcessor {
-      get {
-        SequentialProcessor seq = new SequentialProcessor();
-        AccuracyEvaluator trainingAccuracy = new AccuracyEvaluator();
-        trainingAccuracy.GetVariableInfo("Accuracy").ActualName = "TrainingAccuracy";
-        trainingAccuracy.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-        trainingAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-
-        AccuracyEvaluator validationAccuracy = new AccuracyEvaluator();
-        validationAccuracy.GetVariableInfo("Accuracy").ActualName = "ValidationAccuracy";
-        validationAccuracy.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-        validationAccuracy.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-
-        AccuracyEvaluator testAccuracy = new AccuracyEvaluator();
-        testAccuracy.GetVariableInfo("Accuracy").ActualName = "TestAccuracy";
-        testAccuracy.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-        testAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-
-        ConfusionMatrixEvaluator trainingConfusionMatrix = new ConfusionMatrixEvaluator();
-        trainingConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TrainingConfusionMatrix";
-        trainingConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-        trainingConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-
-        ConfusionMatrixEvaluator validationConfusionMatrix = new ConfusionMatrixEvaluator();
-        validationConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "ValidationConfusionMatrix";
-        validationConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-        validationConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-
-        ConfusionMatrixEvaluator testConfusionMatrix = new ConfusionMatrixEvaluator();
-        testConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TestConfusionMatrix";
-        testConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-        testConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-
-        seq.AddSubOperator(trainingAccuracy);
-        seq.AddSubOperator(validationAccuracy);
-        seq.AddSubOperator(testAccuracy);
-        seq.AddSubOperator(trainingConfusionMatrix);
-        seq.AddSubOperator(validationConfusionMatrix);
-        seq.AddSubOperator(testConfusionMatrix);
-        return seq;
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/AveragePercentageChangeEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/AveragePercentageChangeEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/AveragePercentageChangeEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/FunctionLibraryInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/FunctionLibraryInjector.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1529)
@@ -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>{6084CFB5-733F-449D-9F92-2E40D13F0514}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP.StructureIdentification.TimeSeries</RootNamespace>
+    <AssemblyName>HeuristicLab.GP.StructureIdentification.TimeSeries-3.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="AveragePercentageChangeEvaluator.cs" />
+    <Compile Include="FunctionLibraryInjector.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLabGPTimeSeriesPlugin.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="OffspringSelectionGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OffspringSelectionGpEditor.Designer.cs">
+      <DependentUpon>OffspringSelectionGpEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProblemInjector.cs" />
+    <Compile Include="ProfitEvaluator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StandardGP.cs" />
+    <Compile Include="StandardGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StandardGpEditor.Designer.cs">
+      <DependentUpon>StandardGpEditor.cs</DependentUpon>
+    </Compile>
+    <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.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>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="OffspringSelectionGpEditor.resx">
+      <DependentUpon>OffspringSelectionGpEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StandardGpEditor.resx">
+      <DependentUpon>StandardGpEditor.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: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/HeuristicLabGPTimeSeriesPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/HeuristicLabGPTimeSeriesPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/HeuristicLabGPTimeSeriesPlugin.cs	(revision 1529)
@@ -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.TimeSeries {
+  [ClassInfo(Name = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.3")]
+  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.3.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.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabGPTimeSeriesPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGP.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGP.cs	(revision 1529)
@@ -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 System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Logging;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    public virtual bool Autoregressive {
+      get { return ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data; }
+      set { ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = value; }
+    }
+
+    protected override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(StandardGP.BestSolutionProcessor);
+      return seq;
+    }
+
+    public override IEditor CreateEditor() {
+      return new OffspringSelectionGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new OffspringSelectionGpEditor(this);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGPEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGPEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGPEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGpEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGpEditor.Designer.cs	(revision 1529)
@@ -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.GP.StructureIdentification.TimeSeries {
+  partial class OffspringSelectionGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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.autoregressionCheckbox = new System.Windows.Forms.CheckBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.label1);
+      this.parametersTabPage.Controls.Add(this.autoregressionCheckbox);
+      this.parametersTabPage.Controls.SetChildIndex(this.autoregressionCheckbox, 0);
+      this.parametersTabPage.Controls.SetChildIndex(this.label1, 0);
+      // 
+      // autoregressionCheckbox
+      // 
+      this.autoregressionCheckbox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.autoregressionCheckbox.AutoSize = true;
+      this.autoregressionCheckbox.Location = new System.Drawing.Point(218, 267);
+      this.autoregressionCheckbox.Name = "autoregressionCheckbox";
+      this.autoregressionCheckbox.Size = new System.Drawing.Size(135, 17);
+      this.autoregressionCheckbox.TabIndex = 18;
+      this.autoregressionCheckbox.Text = "Autoregression allowed";
+      this.autoregressionCheckbox.UseVisualStyleBackColor = true;
+      // 
+      // label1
+      // 
+      this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(65, 268);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(127, 13);
+      this.label1.TabIndex = 19;
+      this.label1.Text = "Autoregressive modelling:";
+      // 
+      // OffspringSelectionGpEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "OffspringSelectionGpEditor";
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox autoregressionCheckbox;
+    private System.Windows.Forms.Label label1;
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGpEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/OffspringSelectionGpEditor.cs	(revision 1529)
@@ -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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public partial class OffspringSelectionGpEditor : HeuristicLab.GP.StructureIdentification.OffspringSelectionGpEditor {
+    public OffspringSelectionGpEditor() {
+      InitializeComponent();
+    }
+    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
+      : this() {
+      OffspringSelectionGP = osgp;
+    }
+
+    protected override void SetDataBinding() {
+      base.SetDataBinding();      
+      autoregressionCheckbox.DataBindings.Add("Checked", OffspringSelectionGP, "Autoregressive");
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/ProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/ProblemInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/ProblemInjector.cs	(revision 1529)
@@ -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.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class ProblemInjector : HeuristicLab.GP.StructureIdentification.ProblemInjector {
+
+    public override string Description {
+      get {
+        return "Problem injector for time series structure identification.";
+      }
+    }
+
+    public ProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("Autoregressive", "Autoregressive modelling includes previous values of the target variable to predict future values.", typeof(BoolData), Core.VariableKind.New));
+      GetVariableInfo("Autoregressive").Local = true;
+      AddVariable(new Core.Variable("Autoregressive", new BoolData()));
+
+      AddVariableInfo(new Core.VariableInfo("MaxTimeOffset", "MaxTimeOffset", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("MaxTimeOffset").Local = true;
+      AddVariable(new Core.Variable("MaxTimeOffset", new IntData(0)));
+
+      AddVariableInfo(new Core.VariableInfo("MinTimeOffset", "MinTimeOffset", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("MinTimeOffset").Local = true;
+      AddVariable(new Core.Variable("MinTimeOffset", new IntData(-1)));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/ProfitEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/ProfitEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/ProfitEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGP.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGP.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Logging;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
+    public bool Autoregressive {
+      get { return ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data; }
+      set { ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = value; }
+    }
+
+    protected override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(BestSolutionProcessor);
+      return seq;
+    }
+
+    public override IEditor CreateEditor() {
+      return new StandardGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new StandardGpEditor(this);
+    }
+
+    internal static IOperator BestSolutionProcessor {
+      get {
+        SequentialProcessor seq = new SequentialProcessor();
+        TheilInequalityCoefficientEvaluator trainingTheil = new TheilInequalityCoefficientEvaluator();
+        trainingTheil.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingTheil.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TrainingTheilInequalityCoefficient";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TrainingTheilInequalityCoefficientBias";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TrainingTheilInequalityCoefficientVariance";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TrainingTheilInequalityCoefficientCovariance";
+
+        TheilInequalityCoefficientEvaluator validationTheil = new TheilInequalityCoefficientEvaluator();
+        validationTheil.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationTheil.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "ValidationTheilInequalityCoefficient";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "ValidationTheilInequalityCoefficientBias";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "ValidationTheilInequalityCoefficientVariance";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "ValidationTheilInequalityCoefficientCovariance";
+
+        TheilInequalityCoefficientEvaluator testTheil = new TheilInequalityCoefficientEvaluator();
+        testTheil.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testTheil.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+        testTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TestTheilInequalityCoefficient";
+        testTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TestTheilInequalityCoefficientBias";
+        testTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TestTheilInequalityCoefficientVariance";
+        testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
+
+        SimpleEvaluator trainingEvaluator = new SimpleEvaluator();
+        trainingEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+        trainingEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+
+        SimpleEvaluator validationEvaluator = new SimpleEvaluator();
+        validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+        validationEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+
+        SimpleEvaluator testEvaluator = new SimpleEvaluator();
+        testEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+        testEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+
+        LinechartInjector trainingChartInjector = new LinechartInjector();
+        trainingChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+        trainingChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+        trainingChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTrainingPredictedValues";
+
+        LinechartInjector validationChartInjector = new LinechartInjector();
+        validationChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+        validationChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+        validationChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartValidationPredictedValues";
+
+        LinechartInjector testChartInjector = new LinechartInjector();
+        testChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+        testChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+        testChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTestPredictedValues";
+
+        seq.AddSubOperator(trainingTheil);
+        seq.AddSubOperator(validationTheil);
+        seq.AddSubOperator(testTheil);
+        seq.AddSubOperator(trainingEvaluator);
+        seq.AddSubOperator(trainingChartInjector);
+        seq.AddSubOperator(validationEvaluator);
+        seq.AddSubOperator(validationChartInjector);
+        seq.AddSubOperator(testEvaluator);
+        seq.AddSubOperator(testChartInjector);
+
+        return seq;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.Designer.cs	(revision 1529)
@@ -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.GP.StructureIdentification.TimeSeries {
+  partial class StandardGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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.autoregressionCheckbox = new System.Windows.Forms.CheckBox();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.label1);
+      this.parametersTabPage.Controls.Add(this.autoregressionCheckbox);
+      this.parametersTabPage.Controls.SetChildIndex(this.autoregressionCheckbox, 0);
+      this.parametersTabPage.Controls.SetChildIndex(this.label1, 0);
+      // 
+      // label1
+      // 
+      this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(65, 235);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(127, 13);
+      this.label1.TabIndex = 21;
+      this.label1.Text = "Autoregressive modelling:";
+      // 
+      // autoregressionCheckbox
+      // 
+      this.autoregressionCheckbox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.autoregressionCheckbox.AutoSize = true;
+      this.autoregressionCheckbox.Location = new System.Drawing.Point(218, 234);
+      this.autoregressionCheckbox.Name = "autoregressionCheckbox";
+      this.autoregressionCheckbox.Size = new System.Drawing.Size(135, 17);
+      this.autoregressionCheckbox.TabIndex = 20;
+      this.autoregressionCheckbox.Text = "Autoregression allowed";
+      this.autoregressionCheckbox.UseVisualStyleBackColor = true;
+      // 
+      // StandardGpEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "StandardGpEditor";
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.CheckBox autoregressionCheckbox;
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.cs	(revision 1529)
@@ -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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public partial class StandardGpEditor : HeuristicLab.GP.StructureIdentification.StandardGpEditor {
+    public StandardGpEditor() {
+      InitializeComponent();
+    }
+
+    public StandardGpEditor(StandardGP standardGp)
+      : this() {
+      StandardGP = standardGp;
+    }
+
+    protected override void SetDataBinding() {
+      base.SetDataBinding();
+      autoregressionCheckbox.DataBindings.Add("Checked", StandardGP, "Autoregressive");
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/StandardGpEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/TheilInequalityCoefficientEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/TheilInequalityCoefficientEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/3.3/TheilInequalityCoefficientEvaluator.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/AveragePercentageChangeEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/AveragePercentageChangeEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,89 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/FunctionLibraryInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,221 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1528)
+++ 	(revision )
@@ -1,174 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="AveragePercentageChangeEvaluator.cs" />
-    <Compile Include="FunctionLibraryInjector.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="HeuristicLabGPTimeSeriesPlugin.cs" />
-    <Compile Include="OffspringSelectionGP.cs" />
-    <Compile Include="OffspringSelectionGpEditor.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OffspringSelectionGpEditor.Designer.cs">
-      <DependentUpon>OffspringSelectionGpEditor.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ProblemInjector.cs" />
-    <Compile Include="ProfitEvaluator.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="StandardGP.cs" />
-    <Compile Include="StandardGpEditor.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="StandardGpEditor.Designer.cs">
-      <DependentUpon>StandardGpEditor.cs</DependentUpon>
-    </Compile>
-    <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.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>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="HeuristicLab.snk" />
-    <None Include="Properties\AssemblyInfo.frame" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="OffspringSelectionGpEditor.resx">
-      <DependentUpon>OffspringSelectionGpEditor.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="StandardGpEditor.resx">
-      <DependentUpon>StandardGpEditor.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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLabGPTimeSeriesPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLabGPTimeSeriesPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.3.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.3")]
-  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
-  public class HeuristicLabGPTimeSeriesPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1528)
+++ 	(revision )
@@ -1,63 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-using HeuristicLab.Logging;
-
-namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
-  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
-    public virtual bool Autoregressive {
-      get { return ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data; }
-      set { ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = value; }
-    }
-
-    protected override IOperator CreateFunctionLibraryInjector() {
-      return new FunctionLibraryInjector();
-    }
-
-    protected override IOperator CreateProblemInjector() {
-      return new ProblemInjector();
-    }
-
-    protected override IOperator CreateBestSolutionProcessor() {
-      IOperator seq = base.CreateBestSolutionProcessor();
-      seq.AddSubOperator(StandardGP.BestSolutionProcessor);
-      return seq;
-    }
-
-    public override IEditor CreateEditor() {
-      return new OffspringSelectionGpEditor(this);
-    }
-
-    public override IView CreateView() {
-      return new OffspringSelectionGpEditor(this);
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGPEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGPEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,98 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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.TimeSeries {
-  partial class OffspringSelectionGpEditor {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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.autoregressionCheckbox = new System.Windows.Forms.CheckBox();
-      this.label1 = new System.Windows.Forms.Label();
-      this.tabControl.SuspendLayout();
-      this.parametersTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // parametersTabPage
-      // 
-      this.parametersTabPage.Controls.Add(this.label1);
-      this.parametersTabPage.Controls.Add(this.autoregressionCheckbox);
-      this.parametersTabPage.Controls.SetChildIndex(this.autoregressionCheckbox, 0);
-      this.parametersTabPage.Controls.SetChildIndex(this.label1, 0);
-      // 
-      // autoregressionCheckbox
-      // 
-      this.autoregressionCheckbox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.autoregressionCheckbox.AutoSize = true;
-      this.autoregressionCheckbox.Location = new System.Drawing.Point(218, 267);
-      this.autoregressionCheckbox.Name = "autoregressionCheckbox";
-      this.autoregressionCheckbox.Size = new System.Drawing.Size(135, 17);
-      this.autoregressionCheckbox.TabIndex = 18;
-      this.autoregressionCheckbox.Text = "Autoregression allowed";
-      this.autoregressionCheckbox.UseVisualStyleBackColor = true;
-      // 
-      // label1
-      // 
-      this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(65, 268);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(127, 13);
-      this.label1.TabIndex = 19;
-      this.label1.Text = "Autoregressive modelling:";
-      // 
-      // OffspringSelectionGpEditor
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Name = "OffspringSelectionGpEditor";
-      this.tabControl.ResumeLayout(false);
-      this.parametersTabPage.ResumeLayout(false);
-      this.parametersTabPage.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.CheckBox autoregressionCheckbox;
-    private System.Windows.Forms.Label label1;
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-
-namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
-  public partial class OffspringSelectionGpEditor : HeuristicLab.GP.StructureIdentification.OffspringSelectionGpEditor {
-    public OffspringSelectionGpEditor() {
-      InitializeComponent();
-    }
-    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
-      : this() {
-      OffspringSelectionGP = osgp;
-    }
-
-    protected override void SetDataBinding() {
-      base.SetDataBinding();      
-      autoregressionCheckbox.DataBindings.Add("Checked", OffspringSelectionGP, "Autoregressive");
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProblemInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,55 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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.TimeSeries {
-  public class ProblemInjector : HeuristicLab.GP.StructureIdentification.ProblemInjector {
-
-    public override string Description {
-      get {
-        return "Problem injector for time series structure identification.";
-      }
-    }
-
-    public ProblemInjector()
-      : base() {
-      AddVariableInfo(new Core.VariableInfo("Autoregressive", "Autoregressive modelling includes previous values of the target variable to predict future values.", typeof(BoolData), Core.VariableKind.New));
-      GetVariableInfo("Autoregressive").Local = true;
-      AddVariable(new Core.Variable("Autoregressive", new BoolData()));
-
-      AddVariableInfo(new Core.VariableInfo("MaxTimeOffset", "MaxTimeOffset", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("MaxTimeOffset").Local = true;
-      AddVariable(new Core.Variable("MaxTimeOffset", new IntData(0)));
-
-      AddVariableInfo(new Core.VariableInfo("MinTimeOffset", "MinTimeOffset", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("MinTimeOffset").Local = true;
-      AddVariable(new Core.Variable("MinTimeOffset", new IntData(-1)));
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProfitEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProfitEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,87 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1528)
+++ 	(revision )
@@ -1,134 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-using HeuristicLab.Logging;
-
-namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
-  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
-    public bool Autoregressive {
-      get { return ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data; }
-      set { ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = value; }
-    }
-
-    protected override IOperator CreateFunctionLibraryInjector() {
-      return new FunctionLibraryInjector();
-    }
-
-    protected override IOperator CreateProblemInjector() {
-      return new ProblemInjector();
-    }
-
-    protected override IOperator CreateBestSolutionProcessor() {
-      IOperator seq = base.CreateBestSolutionProcessor();
-      seq.AddSubOperator(BestSolutionProcessor);
-      return seq;
-    }
-
-    public override IEditor CreateEditor() {
-      return new StandardGpEditor(this);
-    }
-
-    public override IView CreateView() {
-      return new StandardGpEditor(this);
-    }
-
-    internal static IOperator BestSolutionProcessor {
-      get {
-        SequentialProcessor seq = new SequentialProcessor();
-        TheilInequalityCoefficientEvaluator trainingTheil = new TheilInequalityCoefficientEvaluator();
-        trainingTheil.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-        trainingTheil.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-        trainingTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TrainingTheilInequalityCoefficient";
-        trainingTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TrainingTheilInequalityCoefficientBias";
-        trainingTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TrainingTheilInequalityCoefficientVariance";
-        trainingTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TrainingTheilInequalityCoefficientCovariance";
-
-        TheilInequalityCoefficientEvaluator validationTheil = new TheilInequalityCoefficientEvaluator();
-        validationTheil.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-        validationTheil.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-        validationTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "ValidationTheilInequalityCoefficient";
-        validationTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "ValidationTheilInequalityCoefficientBias";
-        validationTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "ValidationTheilInequalityCoefficientVariance";
-        validationTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "ValidationTheilInequalityCoefficientCovariance";
-
-        TheilInequalityCoefficientEvaluator testTheil = new TheilInequalityCoefficientEvaluator();
-        testTheil.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-        testTheil.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-        testTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TestTheilInequalityCoefficient";
-        testTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TestTheilInequalityCoefficientBias";
-        testTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TestTheilInequalityCoefficientVariance";
-        testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
-
-        SimpleEvaluator trainingEvaluator = new SimpleEvaluator();
-        trainingEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-        trainingEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-        trainingEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
-
-        SimpleEvaluator validationEvaluator = new SimpleEvaluator();
-        validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-        validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-        validationEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
-
-        SimpleEvaluator testEvaluator = new SimpleEvaluator();
-        testEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-        testEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-        testEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
-
-        LinechartInjector trainingChartInjector = new LinechartInjector();
-        trainingChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
-        trainingChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
-        trainingChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTrainingPredictedValues";
-
-        LinechartInjector validationChartInjector = new LinechartInjector();
-        validationChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
-        validationChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
-        validationChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartValidationPredictedValues";
-
-        LinechartInjector testChartInjector = new LinechartInjector();
-        testChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
-        testChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
-        testChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTestPredictedValues";
-
-        seq.AddSubOperator(trainingTheil);
-        seq.AddSubOperator(validationTheil);
-        seq.AddSubOperator(testTheil);
-        seq.AddSubOperator(trainingEvaluator);
-        seq.AddSubOperator(trainingChartInjector);
-        seq.AddSubOperator(validationEvaluator);
-        seq.AddSubOperator(validationChartInjector);
-        seq.AddSubOperator(testEvaluator);
-        seq.AddSubOperator(testChartInjector);
-
-        return seq;
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,98 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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.TimeSeries {
-  partial class StandardGpEditor {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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.autoregressionCheckbox = new System.Windows.Forms.CheckBox();
-      this.tabControl.SuspendLayout();
-      this.parametersTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // parametersTabPage
-      // 
-      this.parametersTabPage.Controls.Add(this.label1);
-      this.parametersTabPage.Controls.Add(this.autoregressionCheckbox);
-      this.parametersTabPage.Controls.SetChildIndex(this.autoregressionCheckbox, 0);
-      this.parametersTabPage.Controls.SetChildIndex(this.label1, 0);
-      // 
-      // label1
-      // 
-      this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(65, 235);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(127, 13);
-      this.label1.TabIndex = 21;
-      this.label1.Text = "Autoregressive modelling:";
-      // 
-      // autoregressionCheckbox
-      // 
-      this.autoregressionCheckbox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.autoregressionCheckbox.AutoSize = true;
-      this.autoregressionCheckbox.Location = new System.Drawing.Point(218, 234);
-      this.autoregressionCheckbox.Name = "autoregressionCheckbox";
-      this.autoregressionCheckbox.Size = new System.Drawing.Size(135, 17);
-      this.autoregressionCheckbox.TabIndex = 20;
-      this.autoregressionCheckbox.Text = "Autoregression allowed";
-      this.autoregressionCheckbox.UseVisualStyleBackColor = true;
-      // 
-      // StandardGpEditor
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Name = "StandardGpEditor";
-      this.tabControl.ResumeLayout(false);
-      this.parametersTabPage.ResumeLayout(false);
-      this.parametersTabPage.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.CheckBox autoregressionCheckbox;
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,47 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-
-namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
-  public partial class StandardGpEditor : HeuristicLab.GP.StructureIdentification.StandardGpEditor {
-    public StandardGpEditor() {
-      InitializeComponent();
-    }
-
-    public StandardGpEditor(StandardGP standardGp)
-      : this() {
-      StandardGP = standardGp;
-    }
-
-    protected override void SetDataBinding() {
-      base.SetDataBinding();
-      autoregressionCheckbox.DataBindings.Add("Checked", StandardGP, "Autoregressive");
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/TheilInequalityCoefficientEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/TheilInequalityCoefficientEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,119 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Addition.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Addition.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Addition.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/AlgorithmBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/AlgorithmBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/AlgorithmBase.cs	(revision 1529)
@@ -0,0 +1,433 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Selection;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public abstract class AlgorithmBase : ItemBase {
+    public virtual double MutationRate {
+      get { return GetVariableInjector().GetVariable("MutationRate").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("MutationRate").GetValue<DoubleData>().Data = value; }
+    }
+    public virtual int PopulationSize {
+      get { return GetVariableInjector().GetVariable("PopulationSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("PopulationSize").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual bool SetSeedRandomly {
+      get { return GetRandomInjector().GetVariable("SetSeedRandomly").GetValue<BoolData>().Data; }
+      set { GetRandomInjector().GetVariable("SetSeedRandomly").GetValue<BoolData>().Data = value; }
+    }
+
+    public virtual int Seed {
+      get { return GetRandomInjector().GetVariable("Seed").GetValue<IntData>().Data; }
+      set { GetRandomInjector().GetVariable("Seed").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual IOperator ProblemInjector {
+      get { return algorithm.SubOperators[0]; }
+      set {
+        value.Name = "ProblemInjector";
+        algorithm.RemoveSubOperator(0);
+        algorithm.AddSubOperator(value, 0);
+      }
+    }
+
+    public virtual int Elites {
+      get { return GetVariableInjector().GetVariable("Elites").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("Elites").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int MaxTreeSize {
+      get { return GetVariableInjector().GetVariable("MaxTreeSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxTreeSize").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int MaxTreeHeight {
+      get { return GetVariableInjector().GetVariable("MaxTreeHeight").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxTreeHeight").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int Parents {
+      get { return GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual double PunishmentFactor {
+      get { return GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public virtual bool UseEstimatedTargetValue {
+      get { return GetVariableInjector().GetVariable("UseEstimatedTargetValue").GetValue<BoolData>().Data; }
+      set { GetVariableInjector().GetVariable("UseEstimatedTargetValue").GetValue<BoolData>().Data = value; }
+    }
+
+    private IOperator algorithm;
+
+    private SequentialEngine.SequentialEngine engine;
+    public IEngine Engine {
+      get { return engine; }
+      protected set { engine = (SequentialEngine.SequentialEngine)value; }
+    }
+
+    public AlgorithmBase() {
+      engine = new SequentialEngine.SequentialEngine();
+      CombinedOperator algo = CreateAlgorithm();
+      engine.OperatorGraph.AddOperator(algo);
+      engine.OperatorGraph.InitialOperator = algo;
+      SetSeedRandomly = true;
+      Elites = 1;
+      MutationRate = 0.15;
+      PopulationSize = 1000;
+      MaxTreeSize = 100;
+      MaxTreeHeight = 10;
+      Parents = 2000;
+      PunishmentFactor = 10;
+      UseEstimatedTargetValue = false;
+    }
+
+    protected internal virtual CombinedOperator CreateAlgorithm() {
+      CombinedOperator algo = new CombinedOperator();
+      algo.Name = "GP";
+      SequentialProcessor seq = new SequentialProcessor();
+      IOperator problemInjector = CreateProblemInjector();
+
+      RandomInjector randomInjector = new RandomInjector();
+      randomInjector.Name = "Random Injector";
+
+      IOperator globalInjector = CreateGlobalInjector();
+      IOperator initialization = CreateInitialization();
+      IOperator funLibInjector = CreateFunctionLibraryInjector();
+      IOperator mainLoop = CreateMainLoop();
+      mainLoop.Name = "Main loop";
+
+      IOperator treeCreator = CreateTreeCreator();
+
+      MeanSquaredErrorEvaluator evaluator = new MeanSquaredErrorEvaluator();
+      evaluator.GetVariableInfo("MSE").ActualName = "Quality";
+      evaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      evaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      evaluator.Name = "Evaluator";
+
+      IOperator crossover = CreateCrossover();
+      IOperator manipulator = CreateManipulator();
+
+      IOperator selector = CreateSelector();
+      LeftReducer cleanUp = new LeftReducer();
+
+      seq.AddSubOperator(problemInjector);
+      seq.AddSubOperator(randomInjector);
+      seq.AddSubOperator(globalInjector);
+      seq.AddSubOperator(funLibInjector);
+      seq.AddSubOperator(initialization);
+      seq.AddSubOperator(mainLoop);
+      seq.AddSubOperator(cleanUp);
+
+      initialization.AddSubOperator(treeCreator);
+      initialization.AddSubOperator(evaluator);
+
+      mainLoop.AddSubOperator(selector);
+      mainLoop.AddSubOperator(crossover);
+      mainLoop.AddSubOperator(manipulator);
+      mainLoop.AddSubOperator(evaluator);
+      algo.OperatorGraph.AddOperator(seq);
+      algo.OperatorGraph.InitialOperator = seq;
+      this.algorithm = seq;
+      return algo;
+    }
+
+    protected internal virtual IOperator CreateProblemInjector() {
+      return new EmptyOperator();
+    }
+
+    protected internal abstract IOperator CreateSelector();
+
+    protected internal abstract IOperator CreateCrossover();
+
+    protected internal abstract IOperator CreateTreeCreator();
+
+    protected internal abstract IOperator CreateFunctionLibraryInjector();
+
+    protected internal virtual IOperator CreateGlobalInjector() {
+      VariableInjector injector = new VariableInjector();
+      injector.Name = "Global Injector";
+      injector.AddVariable(new HeuristicLab.Core.Variable("Generations", new IntData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MutationRate", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("PopulationSize", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Elites", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Maximization", new BoolData(false)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeHeight", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeSize", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("EvaluatedSolutions", new IntData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Parents", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData()));
+      return injector;
+    }
+
+    protected internal abstract IOperator CreateManipulator();
+
+    protected internal virtual IOperator CreateInitialization() {
+      CombinedOperator init = new CombinedOperator();
+      init.Name = "Initialization";
+      SequentialProcessor seq = new SequentialProcessor();
+      SubScopesCreater subScopesCreater = new SubScopesCreater();
+      subScopesCreater.GetVariableInfo("SubScopes").ActualName = "PopulationSize";
+      UniformSequentialSubScopesProcessor subScopesProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor individualSeq = new SequentialProcessor();
+      OperatorExtractor treeCreater = new OperatorExtractor();
+      treeCreater.Name = "Tree generator (extr.)";
+      treeCreater.GetVariableInfo("Operator").ActualName = "Tree generator";
+      OperatorExtractor evaluator = new OperatorExtractor();
+      evaluator.Name = "Evaluator (extr.)";
+      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
+      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
+      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
+      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      Counter evalCounter = new Counter();
+      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+      seq.AddSubOperator(subScopesCreater);
+      seq.AddSubOperator(subScopesProc);
+      seq.AddSubOperator(sorter);
+
+      subScopesProc.AddSubOperator(individualSeq);
+      individualSeq.AddSubOperator(treeCreater);
+      individualSeq.AddSubOperator(evaluator);
+      individualSeq.AddSubOperator(validationEvaluator);
+      individualSeq.AddSubOperator(evalCounter);
+
+      init.OperatorGraph.AddOperator(seq);
+      init.OperatorGraph.InitialOperator = seq;
+      return init;
+    }
+
+    protected internal virtual IOperator CreateMainLoop() {
+      CombinedOperator main = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      IOperator childCreater = CreateChildCreater();
+      IOperator replacement = CreateReplacement();
+
+      BestSolutionStorer solutionStorer = new BestSolutionStorer();
+      solutionStorer.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      solutionStorer.GetVariableInfo("BestSolution").ActualName = "BestValidationSolution";
+      solutionStorer.AddSubOperator(CreateBestSolutionProcessor());
+
+      BestAverageWorstQualityCalculator qualityCalculator = new BestAverageWorstQualityCalculator();
+      BestAverageWorstQualityCalculator validationQualityCalculator = new BestAverageWorstQualityCalculator();
+      validationQualityCalculator.Name = "BestAverageWorstValidationQualityCalculator";
+      validationQualityCalculator.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      validationQualityCalculator.GetVariableInfo("BestQuality").ActualName = "BestValidationQuality";
+      validationQualityCalculator.GetVariableInfo("AverageQuality").ActualName = "AverageValidationQuality";
+      validationQualityCalculator.GetVariableInfo("WorstQuality").ActualName = "WorstValidationQuality";
+      IOperator loggingOperator = CreateLoggingOperator();
+      Counter counter = new Counter();
+      counter.GetVariableInfo("Value").ActualName = "Generations";
+      IOperator loopCondition = CreateLoopCondition(seq);
+
+      seq.AddSubOperator(childCreater);
+      seq.AddSubOperator(replacement);
+      seq.AddSubOperator(solutionStorer);
+      seq.AddSubOperator(qualityCalculator);
+      seq.AddSubOperator(validationQualityCalculator);
+      seq.AddSubOperator(loggingOperator);
+      seq.AddSubOperator(counter);
+      seq.AddSubOperator(loopCondition);
+
+      main.OperatorGraph.AddOperator(seq);
+      main.OperatorGraph.InitialOperator = seq;
+      return main;
+    }
+
+    protected internal virtual IOperator CreateLoggingOperator() {
+      return new EmptyOperator();
+    }
+
+    protected internal virtual IOperator CreateLoopCondition(IOperator loop) {
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Loop Condition";
+      LessThanComparator comparator = new LessThanComparator();
+      comparator.GetVariableInfo("LeftSide").ActualName = "Generations";
+      comparator.GetVariableInfo("RightSide").ActualName = "MaxGenerations";
+      comparator.GetVariableInfo("Result").ActualName = "GenerationsCondition";
+      ConditionalBranch cond = new ConditionalBranch();
+      cond.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
+
+      seq.AddSubOperator(comparator);
+      seq.AddSubOperator(cond);
+
+      cond.AddSubOperator(loop);
+      return seq;
+    }
+
+    protected internal virtual IOperator CreateBestSolutionProcessor() {
+      return new EmptyOperator();
+    }
+
+    protected internal virtual IOperator CreateReplacement() {
+      CombinedOperator replacement = new CombinedOperator();
+      replacement.Name = "Replacement";
+      SequentialProcessor seq = new SequentialProcessor();
+      SequentialSubScopesProcessor seqScopeProc = new SequentialSubScopesProcessor();
+      SequentialProcessor selectedProc = new SequentialProcessor();
+      LeftSelector leftSelector = new LeftSelector();
+      leftSelector.GetVariableInfo("Selected").ActualName = "Elites";
+      RightReducer rightReducer = new RightReducer();
+
+      SequentialProcessor remainingProc = new SequentialProcessor();
+      RightSelector rightSelector = new RightSelector();
+      rightSelector.GetVariableInfo("Selected").ActualName = "Elites";
+      LeftReducer leftReducer = new LeftReducer();
+      MergingReducer mergingReducer = new MergingReducer();
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+      seq.AddSubOperator(seqScopeProc);
+      seqScopeProc.AddSubOperator(selectedProc);
+      selectedProc.AddSubOperator(leftSelector);
+      selectedProc.AddSubOperator(rightReducer);
+
+      seqScopeProc.AddSubOperator(remainingProc);
+      remainingProc.AddSubOperator(rightSelector);
+      remainingProc.AddSubOperator(leftReducer);
+      seq.AddSubOperator(mergingReducer);
+      seq.AddSubOperator(sorter);
+      replacement.OperatorGraph.AddOperator(seq);
+      replacement.OperatorGraph.InitialOperator = seq;
+      return replacement;
+    }
+
+    protected internal virtual IOperator CreateChildCreater() {
+      CombinedOperator childCreater = new CombinedOperator();
+      childCreater.Name = "Create children";
+      SequentialProcessor seq = new SequentialProcessor();
+      OperatorExtractor selector = new OperatorExtractor();
+      selector.Name = "Selector (extr.)";
+      selector.GetVariableInfo("Operator").ActualName = "Selector";
+
+      SequentialSubScopesProcessor seqScopesProc = new SequentialSubScopesProcessor();
+      EmptyOperator emptyOpt = new EmptyOperator();
+      SequentialProcessor selectedProc = new SequentialProcessor();
+      ChildrenInitializer childInitializer = new ChildrenInitializer();
+      ((IntData)childInitializer.GetVariable("ParentsPerChild").Value).Data = 2;
+
+      OperatorExtractor crossover = new OperatorExtractor();
+      crossover.Name = "Crossover (extr.)";
+      crossover.GetVariableInfo("Operator").ActualName = "Crossover";
+      UniformSequentialSubScopesProcessor individualProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor individualSeqProc = new SequentialProcessor();
+      StochasticBranch cond = new StochasticBranch();
+      cond.GetVariableInfo("Probability").ActualName = "MutationRate";
+      OperatorExtractor manipulator = new OperatorExtractor();
+      manipulator.Name = "Manipulator (extr.)";
+      manipulator.GetVariableInfo("Operator").ActualName = "Manipulator";
+      OperatorExtractor evaluator = new OperatorExtractor();
+      evaluator.Name = "Evaluator (extr.)";
+      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
+      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
+      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
+      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      Counter evalCounter = new Counter();
+      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      SubScopesRemover parentRefRemover = new SubScopesRemover();
+
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+
+      seq.AddSubOperator(selector);
+      seq.AddSubOperator(seqScopesProc);
+      seqScopesProc.AddSubOperator(emptyOpt);
+      seqScopesProc.AddSubOperator(selectedProc);
+      selectedProc.AddSubOperator(childInitializer);
+      selectedProc.AddSubOperator(individualProc);
+      individualProc.AddSubOperator(individualSeqProc);
+      individualSeqProc.AddSubOperator(crossover);
+      individualSeqProc.AddSubOperator(cond);
+      cond.AddSubOperator(manipulator);
+      individualSeqProc.AddSubOperator(evaluator);
+      individualSeqProc.AddSubOperator(validationEvaluator);
+      individualSeqProc.AddSubOperator(evalCounter);
+      individualSeqProc.AddSubOperator(parentRefRemover);
+      selectedProc.AddSubOperator(sorter);
+
+      childCreater.OperatorGraph.AddOperator(seq);
+      childCreater.OperatorGraph.InitialOperator = seq;
+      return childCreater;
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      AlgorithmBase clone = (AlgorithmBase)base.Clone(clonedObjects);
+      clonedObjects.Add(Guid, clone);
+      clone.engine = (SequentialEngine.SequentialEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
+    protected VariableInjector GetVariableInjector() {
+      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      // SequentialProcessor in GP
+      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
+      return (VariableInjector)algorithm.SubOperators[2];
+    }
+
+    protected RandomInjector GetRandomInjector() {
+      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      // SequentialProcessor in GP
+      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
+      return (RandomInjector)algorithm.SubOperators[1];
+    }
+
+    #region Persistence Methods
+    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;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      engine = (SequentialEngine.SequentialEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/And.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/And.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/And.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Average.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Average.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Average.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BakedTreeEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BakedTreeEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BakedTreeEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Constant.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Constant.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Constant.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Cosinus.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Cosinus.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Cosinus.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Differential.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Differential.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Differential.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Division.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Division.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Division.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Equal.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Equal.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Equal.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/CoefficientOfDeterminationEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/CoefficientOfDeterminationEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/CoefficientOfDeterminationEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanAbsolutePercentageErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanAbsolutePercentageErrorEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanAbsolutePercentageErrorEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanAbsolutePercentageOfRangeErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanAbsolutePercentageOfRangeErrorEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanAbsolutePercentageOfRangeErrorEvaluator.cs	(revision 1529)
@@ -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.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class MeanAbsolutePercentageOfRangeErrorEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates
+the mean of the absolute percentage error (scale invariant) relative to the range of the target varibale of estimated values vs. real values of 'TargetVariable'.";
+      }
+    }
+
+    public MeanAbsolutePercentageOfRangeErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("MAPRE", "The mean absolute percentage range 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;
+      double range = dataset.GetRange(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) && original != 0.0) {
+          double percent_error = Math.Abs((estimated - original) / range);
+          errorsSum += percent_error;
+          n++;
+        }
+      }
+      double quality = errorsSum / n;
+      if (double.IsNaN(quality) || double.IsInfinity(quality))
+        quality = double.MaxValue;
+
+      // create a variable for the MAPRE
+      DoubleData mapre = GetVariableValue<DoubleData>("MAPRE", scope, false, false);
+      if (mapre == null) {
+        mapre = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MAPRE"), mapre));
+      }
+
+      mapre.Data = quality;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanSquaredErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanSquaredErrorEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/MeanSquaredErrorEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/SimpleEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/SimpleEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/SimpleEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/UncertainMeanSquaredErrorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/UncertainMeanSquaredErrorEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/UncertainMeanSquaredErrorEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VarianceAccountedForEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VarianceAccountedForEvaluator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VarianceAccountedForEvaluator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Exponential.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Exponential.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Exponential.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/FunctionLibraryInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/FunctionLibraryInjector.cs	(revision 1529)
@@ -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
+
+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 {
+  public class FunctionLibraryInjector : OperatorBase {
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string ALLOWEDFEATURES = "AllowedFeatures";
+    private const string FUNCTIONLIBRARY = "FunctionLibrary";
+
+    public override string Description {
+      get { return @"Injects a default function library for regression and 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) {
+      StructId.Variable variable;
+      GPOperatorLibrary operatorLibrary;
+
+      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);
+
+      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);
+
+      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 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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/GreaterThan.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/GreaterThan.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/GreaterThan.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification.csproj	(revision 1529)
@@ -0,0 +1,237 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="AlgorithmBase.cs" />
+    <Compile Include="Evaluators\MeanAbsolutePercentageOfRangeErrorEvaluator.cs" />
+    <Compile Include="FunctionLibraryInjector.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="OffSpringSelectionGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OffSpringSelectionGpEditor.Designer.cs">
+      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProblemInjector.cs" />
+    <Compile Include="ProblemInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProblemInjectorView.Designer.cs">
+      <DependentUpon>ProblemInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StandardGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StandardGpEditor.Designer.cs">
+      <DependentUpon>StandardGpEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StandardGP.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="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.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</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.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>
+    <ProjectReference Include="..\HeuristicLab.Selection.OffspringSelection\HeuristicLab.Selection.OffspringSelection.csproj">
+      <Project>{205898D3-2717-4686-AF17-52409B7EC0C6}</Project>
+      <Name>HeuristicLab.Selection.OffspringSelection</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>
+    <EmbeddedResource Include="OffSpringSelectionGpEditor.resx">
+      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProblemInjectorView.resx">
+      <DependentUpon>ProblemInjectorView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StandardGpEditor.resx">
+      <DependentUpon>StandardGpEditor.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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLabGPStructureIdentificationPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLabGPStructureIdentificationPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLabGPStructureIdentificationPlugin.cs	(revision 1529)
@@ -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.PluginInfrastructure;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  [ClassInfo(Name = "HeuristicLab.GP.StructureIdentification-3.3")]
+  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification-3.3.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.Evolutionary-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
+  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators.Programmable-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Selection-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Selection.OffspringSelection-3.2")]
+  [Dependency(Dependency = "HeuristicLab.SequentialEngine-3.2")]
+  public class HeuristicLabGPStructureIdentificationPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/IfThenElse.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/IfThenElse.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/IfThenElse.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/LessThan.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/LessThan.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/LessThan.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Logarithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Logarithm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Logarithm.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ModelAnalyzerExporter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ModelAnalyzerExporter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ModelAnalyzerExporter.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Multiplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Multiplication.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Multiplication.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Not.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Not.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Not.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.Designer.cs	(revision 1529)
@@ -0,0 +1,404 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 OffspringSelectionGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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.selectionPressureTextBox = new System.Windows.Forms.TextBox();
+      this.selectionPressureLabel = new System.Windows.Forms.Label();
+      this.viewProblemInitializationButton = new System.Windows.Forms.Button();
+      this.setProblemInitializationButton = new System.Windows.Forms.Button();
+      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
+      this.elitesTextBox = new System.Windows.Forms.TextBox();
+      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.maximumEvaluatedSolutionsTextBox = new System.Windows.Forms.TextBox();
+      this.maxEvaluatedSolutionsLabel = 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.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.selectionPressureTextBox);
+      this.parametersTabPage.Controls.Add(this.selectionPressureLabel);
+      this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
+      this.parametersTabPage.Controls.Add(this.elitesTextBox);
+      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.maximumEvaluatedSolutionsTextBox);
+      this.parametersTabPage.Controls.Add(this.maxEvaluatedSolutionsLabel);
+      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;
+      // 
+      // selectionPressureTextBox
+      // 
+      this.selectionPressureTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionPressureTextBox.Location = new System.Drawing.Point(218, 130);
+      this.selectionPressureTextBox.Name = "selectionPressureTextBox";
+      this.selectionPressureTextBox.Size = new System.Drawing.Size(186, 20);
+      this.selectionPressureTextBox.TabIndex = 17;
+      // 
+      // selectionPressureLabel
+      // 
+      this.selectionPressureLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionPressureLabel.AutoSize = true;
+      this.selectionPressureLabel.Location = new System.Drawing.Point(65, 133);
+      this.selectionPressureLabel.Name = "selectionPressureLabel";
+      this.selectionPressureLabel.Size = new System.Drawing.Size(145, 13);
+      this.selectionPressureLabel.TabIndex = 16;
+      this.selectionPressureLabel.Text = "Maximum &Selection Pressure:";
+      // 
+      // viewProblemInitializationButton
+      // 
+      this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 241);
+      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.viewProblemInjectorButton_Click);
+      // 
+      // setProblemInitializationButton
+      // 
+      this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 241);
+      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);
+      // 
+      // problemInitializationTextBox
+      // 
+      this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 241);
+      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;
+      this.setRandomSeedRandomlyCheckBox.CheckedChanged += new System.EventHandler(this.setRandomSeedRandomlyCheckBox_CheckedChanged);
+      // 
+      // elitesTextBox
+      // 
+      this.elitesTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesTextBox.Location = new System.Drawing.Point(218, 182);
+      this.elitesTextBox.Name = "elitesTextBox";
+      this.elitesTextBox.Size = new System.Drawing.Size(186, 20);
+      this.elitesTextBox.TabIndex = 11;
+      // 
+      // problemInitializationLabel
+      // 
+      this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationLabel.AutoSize = true;
+      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 244);
+      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(66, 185);
+      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, 156);
+      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(66, 159);
+      this.mutationRateLabel.Name = "mutationRateLabel";
+      this.mutationRateLabel.Size = new System.Drawing.Size(77, 13);
+      this.mutationRateLabel.TabIndex = 8;
+      this.mutationRateLabel.Text = "&Mutation Rate:";
+      // 
+      // maximumEvaluatedSolutionsTextBox
+      // 
+      this.maximumEvaluatedSolutionsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumEvaluatedSolutionsTextBox.Location = new System.Drawing.Point(218, 104);
+      this.maximumEvaluatedSolutionsTextBox.Name = "maximumEvaluatedSolutionsTextBox";
+      this.maximumEvaluatedSolutionsTextBox.Size = new System.Drawing.Size(186, 20);
+      this.maximumEvaluatedSolutionsTextBox.TabIndex = 7;
+      // 
+      // maxEvaluatedSolutionsLabel
+      // 
+      this.maxEvaluatedSolutionsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maxEvaluatedSolutionsLabel.AutoSize = true;
+      this.maxEvaluatedSolutionsLabel.Location = new System.Drawing.Point(65, 107);
+      this.maxEvaluatedSolutionsLabel.Name = "maxEvaluatedSolutionsLabel";
+      this.maxEvaluatedSolutionsLabel.Size = new System.Drawing.Size(130, 13);
+      this.maxEvaluatedSolutionsLabel.TabIndex = 6;
+      this.maxEvaluatedSolutionsLabel.Text = "Max. E&valuated Solutions:";
+      // 
+      // 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);
+      // 
+      // OffspringSelectionGpEditor
+      // 
+      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 = "OffspringSelectionGpEditor";
+      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;
+    protected System.Windows.Forms.TabControl tabControl;
+    protected 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 maximumEvaluatedSolutionsTextBox;
+    private System.Windows.Forms.Label maxEvaluatedSolutionsLabel;
+    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.Button cloneEngineButton;
+    private System.Windows.Forms.TextBox problemInitializationTextBox;
+    private System.Windows.Forms.Button setProblemInitializationButton;
+    private HeuristicLab.Core.ScopeView scopeView;
+    private System.Windows.Forms.Button viewProblemInitializationButton;
+    private System.Windows.Forms.TextBox selectionPressureTextBox;
+    private System.Windows.Forms.Label selectionPressureLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.cs	(revision 1529)
@@ -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;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public partial class OffspringSelectionGpEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    public OffspringSelectionGP OffspringSelectionGP {
+      get { return (OffspringSelectionGP)Item; }
+      set { base.Item = value; }
+    }
+
+    public OffspringSelectionGpEditor() {
+      InitializeComponent();
+    }
+    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
+      : this() {
+      OffspringSelectionGP = osgp;
+    }
+
+    protected override void RemoveItemEvents() {
+      OffspringSelectionGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      OffspringSelectionGP.Engine.Finished -= new EventHandler(Engine_Finished);
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      OffspringSelectionGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      OffspringSelectionGP.Engine.Finished += new EventHandler(Engine_Finished);
+      SetDataBinding();
+      scopeView.Scope = OffspringSelectionGP.Engine.GlobalScope;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (OffspringSelectionGP == null) {
+        tabControl.Enabled = false;
+      } else {
+        tabControl.Enabled = true;
+        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
+      }
+    }
+
+    protected virtual void SetDataBinding() {
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", OffspringSelectionGP, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Seed");
+      populationSizeTextBox.DataBindings.Add("Text", OffspringSelectionGP, "PopulationSize");
+      maximumEvaluatedSolutionsTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MaxEvaluatedSolutions");
+      selectionPressureTextBox.DataBindings.Add("Text", OffspringSelectionGP, "SelectionPressureLimit");
+      mutationRateTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MutationRate");
+      elitesTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Elites");
+    }
+
+    #region Button Events
+    private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
+      IView view = OffspringSelectionGP.ProblemInjector.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) {
+        OffspringSelectionGP.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
+      }
+    }
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      resetButton.Enabled = false;
+      OffspringSelectionGP.Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      OffspringSelectionGP.Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      OffspringSelectionGP.Engine.Reset();
+    }
+    private void cloneEngineButton_Click(object sender, EventArgs e) {
+      IEngine clone = (IEngine)OffspringSelectionGP.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) {
+      if(InvokeRequired)
+        Invoke((EventHandler)Engine_Finished, sender, e);
+      else {
+        scopeView.Refresh();
+        executeButton.Enabled = true;
+        abortButton.Enabled = false;
+        resetButton.Enabled = true;
+      }
+    }
+    #endregion
+
+    private void setRandomSeedRandomlyCheckBox_CheckedChanged(object sender, EventArgs e) {
+      randomSeedTextBox.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+      randomSeedLabel.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffSpringSelectionGpEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGP.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGP.cs	(revision 1529)
@@ -0,0 +1,277 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Selection;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+using HeuristicLab.Selection.OffspringSelection;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class OffspringSelectionGP : StandardGP {
+
+    public virtual int MaxEvaluatedSolutions {
+      get { return GetVariableInjector().GetVariable("MaxEvaluatedSolutions").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxEvaluatedSolutions").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual double SelectionPressureLimit {
+      get { return GetVariableInjector().GetVariable("SelectionPressureLimit").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("SelectionPressureLimit").GetValue<DoubleData>().Data = value; }
+    }
+
+    public virtual double ComparisonFactor {
+      get { return GetVariableInjector().GetVariable("ComparisonFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("ComparisonFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public virtual double SuccessRatioLimit {
+      get { return GetVariableInjector().GetVariable("SuccessRatioLimit").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("SuccessRatioLimit").GetValue<DoubleData>().Data = value; }
+    }
+
+    public override int MaxGenerations {
+      get { throw new NotSupportedException(); }
+      set { /* ignore */ }
+    }
+
+    public override int TournamentSize {
+      get { throw new NotSupportedException(); }
+      set { /* ignore */ }
+    }
+
+    public OffspringSelectionGP()
+      : base() {
+      PopulationSize = 1000;
+      Parents = 20;
+      MaxEvaluatedSolutions = 1000000;
+      SelectionPressureLimit = 300;
+      ComparisonFactor = 1.0;
+      SuccessRatioLimit = 1.0;
+    }
+
+    protected internal override IOperator CreateGlobalInjector() {
+      VariableInjector injector = (VariableInjector)base.CreateGlobalInjector();
+      injector.RemoveVariable("TournamentSize");
+      injector.RemoveVariable("MaxGenerations");
+      injector.AddVariable(new HeuristicLab.Core.Variable("MaxEvaluatedSolutions", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("ComparisonFactor", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("SelectionPressureLimit", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("SuccessRatioLimit", new DoubleData()));
+      return injector;
+    }
+
+    protected internal override IOperator CreateSelector() {
+      CombinedOperator selector = new CombinedOperator();
+      selector.Name = "Selector";
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Selector";
+      EmptyOperator emptyOp = new EmptyOperator();
+      ProportionalSelector femaleSelector = new ProportionalSelector();
+      femaleSelector.GetVariableInfo("Selected").ActualName = "Parents";
+      femaleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
+
+      RandomSelector maleSelector = new RandomSelector();
+      maleSelector.GetVariableInfo("Selected").ActualName = "Parents";
+      maleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
+      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
+      RightChildReducer rightChildReducer = new RightChildReducer();
+      SubScopesMixer mixer = new SubScopesMixer();
+
+      seqSubScopesProc.AddSubOperator(femaleSelector);
+      seqSubScopesProc.AddSubOperator(emptyOp);
+
+      seq.AddSubOperator(maleSelector);
+      seq.AddSubOperator(seqSubScopesProc);
+      seq.AddSubOperator(rightChildReducer);
+      seq.AddSubOperator(mixer);
+
+      selector.OperatorGraph.AddOperator(seq);
+      selector.OperatorGraph.InitialOperator = seq;
+      return selector;
+    }
+
+    protected internal override IOperator CreateChildCreater() {
+      CombinedOperator childCreater = new CombinedOperator();
+      childCreater.Name = "Create children";
+      SequentialProcessor main = new SequentialProcessor();
+      SequentialProcessor seq = new SequentialProcessor();
+      SequentialProcessor offspringSelectionSeq = new SequentialProcessor();
+      OperatorExtractor selector = new OperatorExtractor();
+      selector.Name = "Selector (extr.)";
+      selector.GetVariableInfo("Operator").ActualName = "Selector";
+      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
+      EmptyOperator emptyOp = new EmptyOperator();
+      OffspringSelector offspringSelector = new OffspringSelector();
+      ChildrenInitializer childInitializer = new ChildrenInitializer();
+      UniformSequentialSubScopesProcessor individualProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor individualSeqProc = new SequentialProcessor();
+      OperatorExtractor crossover = new OperatorExtractor();
+      crossover.Name = "Crossover (extr.)";
+      crossover.GetVariableInfo("Operator").ActualName = "Crossover";
+      StochasticBranch cond = new StochasticBranch();
+      cond.GetVariableInfo("Probability").ActualName = "MutationRate";
+      OperatorExtractor manipulator = new OperatorExtractor();
+      manipulator.Name = "Manipulator (extr.)";
+      manipulator.GetVariableInfo("Operator").ActualName = "Manipulator";
+      OperatorExtractor evaluator = new OperatorExtractor();
+      evaluator.Name = "Evaluator (extr.)";
+      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
+      Counter evalCounter = new Counter();
+      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      WeightedOffspringFitnessComparer offspringFitnessComparer = new WeightedOffspringFitnessComparer();
+      SubScopesRemover parentScopesRemover = new SubScopesRemover();
+
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+      UniformSequentialSubScopesProcessor validationEvaluator = new UniformSequentialSubScopesProcessor();
+      MeanSquaredErrorEvaluator validationQualityEvaluator = new MeanSquaredErrorEvaluator();
+      validationQualityEvaluator.Name = "ValidationMeanSquaredErrorEvaluator";
+      validationQualityEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
+      validationQualityEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationQualityEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+      main.AddSubOperator(seq);
+      seq.AddSubOperator(selector);
+      seq.AddSubOperator(seqSubScopesProc);
+      seqSubScopesProc.AddSubOperator(emptyOp);
+      seqSubScopesProc.AddSubOperator(offspringSelectionSeq);
+      seq.AddSubOperator(offspringSelector);
+      offspringSelector.AddSubOperator(seq);
+
+      offspringSelectionSeq.AddSubOperator(childInitializer);
+      offspringSelectionSeq.AddSubOperator(individualProc);
+      offspringSelectionSeq.AddSubOperator(sorter);
+
+      individualProc.AddSubOperator(individualSeqProc);
+      individualSeqProc.AddSubOperator(crossover);
+      individualSeqProc.AddSubOperator(cond);
+      cond.AddSubOperator(manipulator);
+      individualSeqProc.AddSubOperator(evaluator);
+      individualSeqProc.AddSubOperator(evalCounter);
+      individualSeqProc.AddSubOperator(offspringFitnessComparer);
+      individualSeqProc.AddSubOperator(parentScopesRemover);
+
+      SequentialSubScopesProcessor seqSubScopesProc2 = new SequentialSubScopesProcessor();
+      main.AddSubOperator(seqSubScopesProc2);
+      seqSubScopesProc2.AddSubOperator(emptyOp);
+
+      SequentialProcessor newGenProc = new SequentialProcessor();
+      newGenProc.AddSubOperator(sorter);
+      newGenProc.AddSubOperator(validationEvaluator);
+      seqSubScopesProc2.AddSubOperator(newGenProc);
+
+      validationEvaluator.AddSubOperator(validationQualityEvaluator);
+
+      childCreater.OperatorGraph.AddOperator(main);
+      childCreater.OperatorGraph.InitialOperator = main;
+      return childCreater;
+    }
+
+    protected internal override IOperator CreateLoopCondition(IOperator loop) {
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Loop Condition";
+      LessThanComparator generationsComparator = new LessThanComparator();
+      generationsComparator.GetVariableInfo("LeftSide").ActualName = "EvaluatedSolutions";
+      generationsComparator.GetVariableInfo("RightSide").ActualName = "MaxEvaluatedSolutions";
+      generationsComparator.GetVariableInfo("Result").ActualName = "EvaluatedSolutionsCondition";
+
+      LessThanComparator selPresComparator = new LessThanComparator();
+      selPresComparator.GetVariableInfo("LeftSide").ActualName = "SelectionPressure";
+      selPresComparator.GetVariableInfo("RightSide").ActualName = "SelectionPressureLimit";
+      selPresComparator.GetVariableInfo("Result").ActualName = "SelectionPressureCondition";
+
+      ConditionalBranch generationsCond = new ConditionalBranch();
+      generationsCond.GetVariableInfo("Condition").ActualName = "EvaluatedSolutionsCondition";
+
+      ConditionalBranch selPresCond = new ConditionalBranch();
+      selPresCond.GetVariableInfo("Condition").ActualName = "SelectionPressureCondition";
+
+      seq.AddSubOperator(generationsComparator);
+      seq.AddSubOperator(selPresComparator);
+      seq.AddSubOperator(generationsCond);
+      generationsCond.AddSubOperator(selPresCond);
+      selPresCond.AddSubOperator(loop);
+
+      return seq;
+    }
+
+    protected internal override IOperator CreateLoggingOperator() {
+      CombinedOperator loggingOperator = new CombinedOperator();
+      loggingOperator.Name = "Logging";
+      SequentialProcessor seq = new SequentialProcessor();
+
+      DataCollector collector = new DataCollector();
+      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
+      names.Add(new StringData("BestQuality"));
+      names.Add(new StringData("AverageQuality"));
+      names.Add(new StringData("WorstQuality"));
+      names.Add(new StringData("BestValidationQuality"));
+      names.Add(new StringData("AverageValidationQuality"));
+      names.Add(new StringData("WorstValidationQuality"));
+      names.Add(new StringData("EvaluatedSolutions"));
+      names.Add(new StringData("SelectionPressure"));
+      QualityLogger qualityLogger = new QualityLogger();
+      QualityLogger validationQualityLogger = new QualityLogger();
+      validationQualityLogger.Name = "ValidationQualityLogger";
+      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
+
+      seq.AddSubOperator(collector);
+      seq.AddSubOperator(qualityLogger);
+      seq.AddSubOperator(validationQualityLogger);
+
+      loggingOperator.OperatorGraph.AddOperator(seq);
+      loggingOperator.OperatorGraph.InitialOperator = seq;
+      return loggingOperator;
+    }
+
+
+    public override IEditor CreateEditor() {
+      return new OffspringSelectionGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new OffspringSelectionGpEditor(this);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OffspringSelectionGP clone = (OffspringSelectionGP)base.Clone(clonedObjects);
+      clone.SelectionPressureLimit = SelectionPressureLimit;
+      clone.SuccessRatioLimit = SuccessRatioLimit;
+      clone.ComparisonFactor = ComparisonFactor;
+      return clone;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Or.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Or.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Or.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Power.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Power.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Power.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjector.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjector.cs	(revision 1529)
@@ -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 ProblemInjector : Core.OperatorBase {
+    public override string Description {
+      get { return @"Injects the necessary variables for a structure identification problem."; }
+    }
+
+    public ProblemInjector()
+      : 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 ProblemInjectorView(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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.Designer.cs	(revision 1529)
@@ -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 ProblemInjectorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.cs	(revision 1529)
@@ -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.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 ProblemInjectorView : ViewBase {
+    public ProblemInjector ProblemInjector {
+      get { return (ProblemInjector)Item; }
+      set { base.Item = value; }
+    }
+
+    public ProblemInjectorView()
+      : base() {
+      InitializeComponent();
+    }
+    public ProblemInjectorView(ProblemInjector problemInjector)
+      : this() {
+      ProblemInjector = problemInjector;
+      variablesView.Operator = problemInjector;
+      variablesView.Update();
+    }
+
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = ProblemInjector;
+      operatorBaseDescriptionView.Operator = ProblemInjector;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ProblemInjector == null) {
+        importInstanceButton.Enabled = false;
+      } else {
+        Dataset dataset = (Dataset)ProblemInjector.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)ProblemInjector.GetVariable("Dataset").Value;
+          dataset.Rows = parser.Rows;
+          dataset.Columns = parser.Columns;
+          for (int i = 0; i < parser.VariableNames.Length; i++) {
+            dataset.SetVariableName(i, parser.VariableNames[i]);
+          }
+          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 = ProblemInjector.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 = ProblemInjector.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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ProblemInjectorView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Signum.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Signum.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Signum.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Sinus.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Sinus.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Sinus.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Sqrt.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Sqrt.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Sqrt.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs	(revision 1529)
@@ -0,0 +1,297 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Selection;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class StandardGP : AlgorithmBase, IEditable {
+
+    public virtual int MaxGenerations {
+      get { return GetVariableInjector().GetVariable("MaxGenerations").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxGenerations").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int TournamentSize {
+      get { return GetVariableInjector().GetVariable("TournamentSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("TournamentSize").GetValue<IntData>().Data = value; }
+    }
+
+    public double FullTreeShakingFactor {
+      get { return GetVariableInjector().GetVariable("FullTreeShakingFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("FullTreeShakingFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public double OnePointShakingFactor {
+      get { return GetVariableInjector().GetVariable("OnePointShakingFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("OnePointShakingFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public int MinInitialTreeSize {
+      get { return GetVariableInjector().GetVariable("MinInitialTreeSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MinInitialTreeSize").GetValue<IntData>().Data = value; }
+    }
+
+    public override int MaxTreeSize {
+      get {
+        return base.MaxTreeSize;
+      }
+      set {
+        base.MaxTreeSize = value;
+        MinInitialTreeSize = value / 2;
+      }
+    }
+
+    public override int PopulationSize {
+      get {
+        return base.PopulationSize;
+      }
+      set {
+        base.PopulationSize = value;
+        Parents = 2 * value;
+      }
+    }
+
+    public StandardGP()
+      : base() {
+      PopulationSize = 10000;
+      MaxGenerations = 100;
+      TournamentSize = 7;
+      MutationRate = 0.15;
+      Elites = 1;
+      MaxTreeSize = 100;
+      MaxTreeHeight = 10;
+      FullTreeShakingFactor = 0.1;
+      OnePointShakingFactor = 1.0;
+      PunishmentFactor = 10.0;
+      UseEstimatedTargetValue = false;
+      SetSeedRandomly = true;
+    }
+
+    protected internal override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected internal override IOperator CreateSelector() {
+      TournamentSelector selector = new TournamentSelector();
+      selector.Name = "Selector";
+      selector.GetVariableInfo("Selected").ActualName = "Parents";
+      selector.GetVariableInfo("GroupSize").Local = false;
+      selector.RemoveVariable("GroupSize");
+      selector.GetVariableInfo("GroupSize").ActualName = "TournamentSize";
+      return selector;
+    }
+
+    protected internal override IOperator CreateGlobalInjector() {
+      VariableInjector globalInjector = (VariableInjector)base.CreateGlobalInjector();
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("TournamentSize", new IntData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("MaxGenerations", new IntData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("FullTreeShakingFactor", new DoubleData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("OnePointShakingFactor", new DoubleData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("MinInitialTreeSize", new IntData()));
+      return globalInjector;
+    }
+
+    protected internal override IOperator CreateCrossover() {
+      StandardCrossOver crossover = new StandardCrossOver();
+      crossover.Name = "Crossover";
+      crossover.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      return crossover;
+    }
+
+    protected internal override IOperator CreateTreeCreator() {
+      ProbabilisticTreeCreator treeCreator = new ProbabilisticTreeCreator();
+      treeCreator.Name = "Tree generator";
+      treeCreator.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      treeCreator.GetVariableInfo("MinTreeSize").ActualName = "MinInitialTreeSize";
+      return treeCreator;
+    }
+
+    protected internal override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected internal override IOperator CreateManipulator() {
+      CombinedOperator manipulator = new CombinedOperator();
+      manipulator.Name = "Manipulator";
+      StochasticMultiBranch multibranch = new StochasticMultiBranch();
+      FullTreeShaker fullTreeShaker = new FullTreeShaker();
+      fullTreeShaker.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      fullTreeShaker.GetVariableInfo("ShakingFactor").ActualName = "FullTreeShakingFactor";
+
+      OnePointShaker onepointShaker = new OnePointShaker();
+      onepointShaker.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      onepointShaker.GetVariableInfo("ShakingFactor").ActualName = "OnePointShakingFactor";
+      ChangeNodeTypeManipulation changeNodeTypeManipulation = new ChangeNodeTypeManipulation();
+      changeNodeTypeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      CutOutNodeManipulation cutOutNodeManipulation = new CutOutNodeManipulation();
+      cutOutNodeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      DeleteSubTreeManipulation deleteSubTreeManipulation = new DeleteSubTreeManipulation();
+      deleteSubTreeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      SubstituteSubTreeManipulation substituteSubTreeManipulation = new SubstituteSubTreeManipulation();
+      substituteSubTreeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+
+      IOperator[] manipulators = new IOperator[] {
+        onepointShaker, fullTreeShaker,
+        changeNodeTypeManipulation,
+        cutOutNodeManipulation,
+        deleteSubTreeManipulation,
+        substituteSubTreeManipulation};
+
+      DoubleArrayData probabilities = new DoubleArrayData(new double[manipulators.Length]);
+      for (int i = 0; i < manipulators.Length; i++) {
+        probabilities.Data[i] = 1.0;
+        multibranch.AddSubOperator(manipulators[i]);
+      }
+      multibranch.GetVariableInfo("Probabilities").Local = true;
+      multibranch.AddVariable(new HeuristicLab.Core.Variable("Probabilities", probabilities));
+
+      manipulator.OperatorGraph.AddOperator(multibranch);
+      manipulator.OperatorGraph.InitialOperator = multibranch;
+      return manipulator;
+    }
+
+    protected internal override IOperator CreateBestSolutionProcessor() {
+      SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
+      MeanSquaredErrorEvaluator testMseEvaluator = new MeanSquaredErrorEvaluator();
+      testMseEvaluator.Name = "TestMeanSquaredErrorEvaluator";
+      testMseEvaluator.GetVariableInfo("MSE").ActualName = "TestQuality";
+      testMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
+      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
+      trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
+      trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      MeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
+      validationMapeEvaluator.Name = "ValidationMapeEvaluator";
+      validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
+      validationMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      MeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
+      testMapeEvaluator.Name = "TestMapeEvaluator";
+      testMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TestMAPE";
+      testMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
+      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
+      trainingMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
+      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
+      validationMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      testMapreEvaluator.Name = "TestMapreEvaluator";
+      testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
+      testMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      CoefficientOfDeterminationEvaluator trainingR2Evaluator = new CoefficientOfDeterminationEvaluator();
+      trainingR2Evaluator.Name = "TrainingR2Evaluator";
+      trainingR2Evaluator.GetVariableInfo("R2").ActualName = "TrainingR2";
+      trainingR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      CoefficientOfDeterminationEvaluator validationR2Evaluator = new CoefficientOfDeterminationEvaluator();
+      validationR2Evaluator.Name = "ValidationR2Evaluator";
+      validationR2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
+      validationR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      CoefficientOfDeterminationEvaluator testR2Evaluator = new CoefficientOfDeterminationEvaluator();
+      testR2Evaluator.Name = "TestR2Evaluator";
+      testR2Evaluator.GetVariableInfo("R2").ActualName = "TestR2";
+      testR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      ProgrammableOperator progOperator = new ProgrammableOperator();
+      progOperator.RemoveVariableInfo("Result");
+      progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
+      progOperator.Code = @"
+int evalSolutions = EvaluatedSolutions.Data;
+scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
+";
+      bestSolutionProcessor.AddSubOperator(testMseEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(validationMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(testMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(validationMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(testMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingR2Evaluator);
+      bestSolutionProcessor.AddSubOperator(validationR2Evaluator);
+      bestSolutionProcessor.AddSubOperator(testR2Evaluator);
+      bestSolutionProcessor.AddSubOperator(progOperator);
+      return bestSolutionProcessor;
+    }
+
+    protected internal override IOperator CreateLoggingOperator() {
+      CombinedOperator loggingOperator = new CombinedOperator();
+      loggingOperator.Name = "Logging";
+      SequentialProcessor seq = new SequentialProcessor();
+
+      DataCollector collector = new DataCollector();
+      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
+      names.Add(new StringData("BestQuality"));
+      names.Add(new StringData("AverageQuality"));
+      names.Add(new StringData("WorstQuality"));
+      names.Add(new StringData("BestValidationQuality"));
+      names.Add(new StringData("AverageValidationQuality"));
+      names.Add(new StringData("WorstValidationQuality"));
+      LinechartInjector lineChartInjector = new LinechartInjector();
+      lineChartInjector.GetVariableInfo("Linechart").ActualName = "Quality Linechart";
+      lineChartInjector.GetVariable("NumberOfLines").GetValue<IntData>().Data = 6;
+      QualityLogger qualityLogger = new QualityLogger();
+      QualityLogger validationQualityLogger = new QualityLogger();
+      validationQualityLogger.Name = "ValidationQualityLogger";
+      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
+
+      seq.AddSubOperator(collector);
+      seq.AddSubOperator(lineChartInjector);
+      seq.AddSubOperator(qualityLogger);
+      seq.AddSubOperator(validationQualityLogger);
+
+      loggingOperator.OperatorGraph.AddOperator(seq);
+      loggingOperator.OperatorGraph.InitialOperator = seq;
+      return loggingOperator;
+    }
+
+    public virtual IEditor CreateEditor() {
+      return new StandardGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new StandardGpEditor(this);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.Designer.cs	(revision 1529)
@@ -0,0 +1,380 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 StandardGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any 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.viewProblemInitializationButton = new System.Windows.Forms.Button();
+      this.setProblemInitializationButton = new System.Windows.Forms.Button();
+      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
+      this.elitesTextBox = new System.Windows.Forms.TextBox();
+      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.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.viewProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
+      this.parametersTabPage.Controls.Add(this.elitesTextBox);
+      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;
+      // 
+      // 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.viewProblemInjectorButton_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);
+      // 
+      // 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;
+      this.setRandomSeedRandomlyCheckBox.CheckedChanged += new System.EventHandler(this.setRandomSeedRandomlyCheckBox_CheckedChanged);
+      // 
+      // 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;
+      // 
+      // 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);
+      // 
+      // StandardGpEditor
+      // 
+      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 = "StandardGpEditor";
+      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;
+    protected System.Windows.Forms.TabControl tabControl;
+    protected 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.Button cloneEngineButton;
+    private System.Windows.Forms.TextBox problemInitializationTextBox;
+    private System.Windows.Forms.Button setProblemInitializationButton;
+    private HeuristicLab.Core.ScopeView scopeView;
+    private System.Windows.Forms.Button viewProblemInitializationButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.cs	(revision 1529)
@@ -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.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public partial class StandardGpEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    public StandardGP StandardGP {
+      get { return (StandardGP)Item; }
+      set { base.Item = value; }
+    }
+
+    public StandardGpEditor() {
+      InitializeComponent();
+    }
+    public StandardGpEditor(StandardGP sgp)
+      : this() {
+      StandardGP = sgp;
+    }
+
+    protected override void RemoveItemEvents() {
+      StandardGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      StandardGP.Engine.Finished -= new EventHandler(Engine_Finished);
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      StandardGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      StandardGP.Engine.Finished += new EventHandler(Engine_Finished);
+      SetDataBinding();
+      scopeView.Scope = StandardGP.Engine.GlobalScope;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if(StandardGP == null) {
+        tabControl.Enabled = false;
+      } else {
+        tabControl.Enabled = true;
+        problemInitializationTextBox.Text = StandardGP.ProblemInjector.GetType().Name;
+      }
+    }
+
+    protected virtual void SetDataBinding() {
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", StandardGP, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", StandardGP, "Seed");
+      populationSizeTextBox.DataBindings.Add("Text", StandardGP, "PopulationSize");
+      maximumGenerationsTextBox.DataBindings.Add("Text", StandardGP, "MaxGenerations");
+      mutationRateTextBox.DataBindings.Add("Text", StandardGP, "MutationRate");
+      elitesTextBox.DataBindings.Add("Text", StandardGP, "Elites");
+    }
+
+    #region Button Events
+    private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
+      IView view = StandardGP.ProblemInjector.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) {
+        StandardGP.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = StandardGP.ProblemInjector.GetType().Name;
+      }
+    }
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      resetButton.Enabled = false;
+      StandardGP.Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      StandardGP.Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      StandardGP.Engine.Reset();
+    }
+    private void cloneEngineButton_Click(object sender, EventArgs e) {
+      IEngine clone = (IEngine)StandardGP.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) {
+      if(InvokeRequired)
+        Invoke((EventHandler)Engine_Finished, sender, e);
+      else {
+        scopeView.Refresh();
+        executeButton.Enabled = true;
+        abortButton.Enabled = false;
+        resetButton.Enabled = true;
+      }
+    }
+    #endregion
+
+    private void setRandomSeedRandomlyCheckBox_CheckedChanged(object sender, EventArgs e) {
+      randomSeedTextBox.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+      randomSeedLabel.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGpEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Subtraction.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Subtraction.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Subtraction.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/SymbolTable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/SymbolTable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/SymbolTable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/SymbolicExpressionExporter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/SymbolicExpressionExporter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/SymbolicExpressionExporter.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Tangens.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Tangens.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Tangens.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Variable.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Variable.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Xor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Xor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Xor.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.GP.StructureIdentification/Addition.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Addition.cs	(revision 1528)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,433 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Operators;
-using HeuristicLab.Random;
-using HeuristicLab.Selection;
-using HeuristicLab.Logging;
-using HeuristicLab.Data;
-using HeuristicLab.Operators.Programmable;
-using HeuristicLab.Evolutionary;
-
-namespace HeuristicLab.GP.StructureIdentification {
-  public abstract class AlgorithmBase : ItemBase {
-    public virtual double MutationRate {
-      get { return GetVariableInjector().GetVariable("MutationRate").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("MutationRate").GetValue<DoubleData>().Data = value; }
-    }
-    public virtual int PopulationSize {
-      get { return GetVariableInjector().GetVariable("PopulationSize").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("PopulationSize").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual bool SetSeedRandomly {
-      get { return GetRandomInjector().GetVariable("SetSeedRandomly").GetValue<BoolData>().Data; }
-      set { GetRandomInjector().GetVariable("SetSeedRandomly").GetValue<BoolData>().Data = value; }
-    }
-
-    public virtual int Seed {
-      get { return GetRandomInjector().GetVariable("Seed").GetValue<IntData>().Data; }
-      set { GetRandomInjector().GetVariable("Seed").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual IOperator ProblemInjector {
-      get { return algorithm.SubOperators[0]; }
-      set {
-        value.Name = "ProblemInjector";
-        algorithm.RemoveSubOperator(0);
-        algorithm.AddSubOperator(value, 0);
-      }
-    }
-
-    public virtual int Elites {
-      get { return GetVariableInjector().GetVariable("Elites").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("Elites").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual int MaxTreeSize {
-      get { return GetVariableInjector().GetVariable("MaxTreeSize").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("MaxTreeSize").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual int MaxTreeHeight {
-      get { return GetVariableInjector().GetVariable("MaxTreeHeight").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("MaxTreeHeight").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual int Parents {
-      get { return GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual double PunishmentFactor {
-      get { return GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data = value; }
-    }
-
-    public virtual bool UseEstimatedTargetValue {
-      get { return GetVariableInjector().GetVariable("UseEstimatedTargetValue").GetValue<BoolData>().Data; }
-      set { GetVariableInjector().GetVariable("UseEstimatedTargetValue").GetValue<BoolData>().Data = value; }
-    }
-
-    private IOperator algorithm;
-
-    private SequentialEngine.SequentialEngine engine;
-    public IEngine Engine {
-      get { return engine; }
-      protected set { engine = (SequentialEngine.SequentialEngine)value; }
-    }
-
-    public AlgorithmBase() {
-      engine = new SequentialEngine.SequentialEngine();
-      CombinedOperator algo = CreateAlgorithm();
-      engine.OperatorGraph.AddOperator(algo);
-      engine.OperatorGraph.InitialOperator = algo;
-      SetSeedRandomly = true;
-      Elites = 1;
-      MutationRate = 0.15;
-      PopulationSize = 1000;
-      MaxTreeSize = 100;
-      MaxTreeHeight = 10;
-      Parents = 2000;
-      PunishmentFactor = 10;
-      UseEstimatedTargetValue = false;
-    }
-
-    protected internal virtual CombinedOperator CreateAlgorithm() {
-      CombinedOperator algo = new CombinedOperator();
-      algo.Name = "GP";
-      SequentialProcessor seq = new SequentialProcessor();
-      IOperator problemInjector = CreateProblemInjector();
-
-      RandomInjector randomInjector = new RandomInjector();
-      randomInjector.Name = "Random Injector";
-
-      IOperator globalInjector = CreateGlobalInjector();
-      IOperator initialization = CreateInitialization();
-      IOperator funLibInjector = CreateFunctionLibraryInjector();
-      IOperator mainLoop = CreateMainLoop();
-      mainLoop.Name = "Main loop";
-
-      IOperator treeCreator = CreateTreeCreator();
-
-      MeanSquaredErrorEvaluator evaluator = new MeanSquaredErrorEvaluator();
-      evaluator.GetVariableInfo("MSE").ActualName = "Quality";
-      evaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-      evaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-      evaluator.Name = "Evaluator";
-
-      IOperator crossover = CreateCrossover();
-      IOperator manipulator = CreateManipulator();
-
-      IOperator selector = CreateSelector();
-      LeftReducer cleanUp = new LeftReducer();
-
-      seq.AddSubOperator(problemInjector);
-      seq.AddSubOperator(randomInjector);
-      seq.AddSubOperator(globalInjector);
-      seq.AddSubOperator(funLibInjector);
-      seq.AddSubOperator(initialization);
-      seq.AddSubOperator(mainLoop);
-      seq.AddSubOperator(cleanUp);
-
-      initialization.AddSubOperator(treeCreator);
-      initialization.AddSubOperator(evaluator);
-
-      mainLoop.AddSubOperator(selector);
-      mainLoop.AddSubOperator(crossover);
-      mainLoop.AddSubOperator(manipulator);
-      mainLoop.AddSubOperator(evaluator);
-      algo.OperatorGraph.AddOperator(seq);
-      algo.OperatorGraph.InitialOperator = seq;
-      this.algorithm = seq;
-      return algo;
-    }
-
-    protected internal virtual IOperator CreateProblemInjector() {
-      return new EmptyOperator();
-    }
-
-    protected internal abstract IOperator CreateSelector();
-
-    protected internal abstract IOperator CreateCrossover();
-
-    protected internal abstract IOperator CreateTreeCreator();
-
-    protected internal abstract IOperator CreateFunctionLibraryInjector();
-
-    protected internal virtual IOperator CreateGlobalInjector() {
-      VariableInjector injector = new VariableInjector();
-      injector.Name = "Global Injector";
-      injector.AddVariable(new HeuristicLab.Core.Variable("Generations", new IntData(0)));
-      injector.AddVariable(new HeuristicLab.Core.Variable("MutationRate", new DoubleData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("PopulationSize", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("Elites", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("Maximization", new BoolData(false)));
-      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeHeight", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeSize", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("EvaluatedSolutions", new IntData(0)));
-      injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
-      injector.AddVariable(new HeuristicLab.Core.Variable("Parents", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData()));
-      return injector;
-    }
-
-    protected internal abstract IOperator CreateManipulator();
-
-    protected internal virtual IOperator CreateInitialization() {
-      CombinedOperator init = new CombinedOperator();
-      init.Name = "Initialization";
-      SequentialProcessor seq = new SequentialProcessor();
-      SubScopesCreater subScopesCreater = new SubScopesCreater();
-      subScopesCreater.GetVariableInfo("SubScopes").ActualName = "PopulationSize";
-      UniformSequentialSubScopesProcessor subScopesProc = new UniformSequentialSubScopesProcessor();
-      SequentialProcessor individualSeq = new SequentialProcessor();
-      OperatorExtractor treeCreater = new OperatorExtractor();
-      treeCreater.Name = "Tree generator (extr.)";
-      treeCreater.GetVariableInfo("Operator").ActualName = "Tree generator";
-      OperatorExtractor evaluator = new OperatorExtractor();
-      evaluator.Name = "Evaluator (extr.)";
-      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
-      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
-      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
-      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      Counter evalCounter = new Counter();
-      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
-      Sorter sorter = new Sorter();
-      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
-      sorter.GetVariableInfo("Value").ActualName = "Quality";
-
-      seq.AddSubOperator(subScopesCreater);
-      seq.AddSubOperator(subScopesProc);
-      seq.AddSubOperator(sorter);
-
-      subScopesProc.AddSubOperator(individualSeq);
-      individualSeq.AddSubOperator(treeCreater);
-      individualSeq.AddSubOperator(evaluator);
-      individualSeq.AddSubOperator(validationEvaluator);
-      individualSeq.AddSubOperator(evalCounter);
-
-      init.OperatorGraph.AddOperator(seq);
-      init.OperatorGraph.InitialOperator = seq;
-      return init;
-    }
-
-    protected internal virtual IOperator CreateMainLoop() {
-      CombinedOperator main = new CombinedOperator();
-      SequentialProcessor seq = new SequentialProcessor();
-      IOperator childCreater = CreateChildCreater();
-      IOperator replacement = CreateReplacement();
-
-      BestSolutionStorer solutionStorer = new BestSolutionStorer();
-      solutionStorer.GetVariableInfo("Quality").ActualName = "ValidationQuality";
-      solutionStorer.GetVariableInfo("BestSolution").ActualName = "BestValidationSolution";
-      solutionStorer.AddSubOperator(CreateBestSolutionProcessor());
-
-      BestAverageWorstQualityCalculator qualityCalculator = new BestAverageWorstQualityCalculator();
-      BestAverageWorstQualityCalculator validationQualityCalculator = new BestAverageWorstQualityCalculator();
-      validationQualityCalculator.Name = "BestAverageWorstValidationQualityCalculator";
-      validationQualityCalculator.GetVariableInfo("Quality").ActualName = "ValidationQuality";
-      validationQualityCalculator.GetVariableInfo("BestQuality").ActualName = "BestValidationQuality";
-      validationQualityCalculator.GetVariableInfo("AverageQuality").ActualName = "AverageValidationQuality";
-      validationQualityCalculator.GetVariableInfo("WorstQuality").ActualName = "WorstValidationQuality";
-      IOperator loggingOperator = CreateLoggingOperator();
-      Counter counter = new Counter();
-      counter.GetVariableInfo("Value").ActualName = "Generations";
-      IOperator loopCondition = CreateLoopCondition(seq);
-
-      seq.AddSubOperator(childCreater);
-      seq.AddSubOperator(replacement);
-      seq.AddSubOperator(solutionStorer);
-      seq.AddSubOperator(qualityCalculator);
-      seq.AddSubOperator(validationQualityCalculator);
-      seq.AddSubOperator(loggingOperator);
-      seq.AddSubOperator(counter);
-      seq.AddSubOperator(loopCondition);
-
-      main.OperatorGraph.AddOperator(seq);
-      main.OperatorGraph.InitialOperator = seq;
-      return main;
-    }
-
-    protected internal virtual IOperator CreateLoggingOperator() {
-      return new EmptyOperator();
-    }
-
-    protected internal virtual IOperator CreateLoopCondition(IOperator loop) {
-      SequentialProcessor seq = new SequentialProcessor();
-      seq.Name = "Loop Condition";
-      LessThanComparator comparator = new LessThanComparator();
-      comparator.GetVariableInfo("LeftSide").ActualName = "Generations";
-      comparator.GetVariableInfo("RightSide").ActualName = "MaxGenerations";
-      comparator.GetVariableInfo("Result").ActualName = "GenerationsCondition";
-      ConditionalBranch cond = new ConditionalBranch();
-      cond.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
-
-      seq.AddSubOperator(comparator);
-      seq.AddSubOperator(cond);
-
-      cond.AddSubOperator(loop);
-      return seq;
-    }
-
-    protected internal virtual IOperator CreateBestSolutionProcessor() {
-      return new EmptyOperator();
-    }
-
-    protected internal virtual IOperator CreateReplacement() {
-      CombinedOperator replacement = new CombinedOperator();
-      replacement.Name = "Replacement";
-      SequentialProcessor seq = new SequentialProcessor();
-      SequentialSubScopesProcessor seqScopeProc = new SequentialSubScopesProcessor();
-      SequentialProcessor selectedProc = new SequentialProcessor();
-      LeftSelector leftSelector = new LeftSelector();
-      leftSelector.GetVariableInfo("Selected").ActualName = "Elites";
-      RightReducer rightReducer = new RightReducer();
-
-      SequentialProcessor remainingProc = new SequentialProcessor();
-      RightSelector rightSelector = new RightSelector();
-      rightSelector.GetVariableInfo("Selected").ActualName = "Elites";
-      LeftReducer leftReducer = new LeftReducer();
-      MergingReducer mergingReducer = new MergingReducer();
-      Sorter sorter = new Sorter();
-      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
-      sorter.GetVariableInfo("Value").ActualName = "Quality";
-
-      seq.AddSubOperator(seqScopeProc);
-      seqScopeProc.AddSubOperator(selectedProc);
-      selectedProc.AddSubOperator(leftSelector);
-      selectedProc.AddSubOperator(rightReducer);
-
-      seqScopeProc.AddSubOperator(remainingProc);
-      remainingProc.AddSubOperator(rightSelector);
-      remainingProc.AddSubOperator(leftReducer);
-      seq.AddSubOperator(mergingReducer);
-      seq.AddSubOperator(sorter);
-      replacement.OperatorGraph.AddOperator(seq);
-      replacement.OperatorGraph.InitialOperator = seq;
-      return replacement;
-    }
-
-    protected internal virtual IOperator CreateChildCreater() {
-      CombinedOperator childCreater = new CombinedOperator();
-      childCreater.Name = "Create children";
-      SequentialProcessor seq = new SequentialProcessor();
-      OperatorExtractor selector = new OperatorExtractor();
-      selector.Name = "Selector (extr.)";
-      selector.GetVariableInfo("Operator").ActualName = "Selector";
-
-      SequentialSubScopesProcessor seqScopesProc = new SequentialSubScopesProcessor();
-      EmptyOperator emptyOpt = new EmptyOperator();
-      SequentialProcessor selectedProc = new SequentialProcessor();
-      ChildrenInitializer childInitializer = new ChildrenInitializer();
-      ((IntData)childInitializer.GetVariable("ParentsPerChild").Value).Data = 2;
-
-      OperatorExtractor crossover = new OperatorExtractor();
-      crossover.Name = "Crossover (extr.)";
-      crossover.GetVariableInfo("Operator").ActualName = "Crossover";
-      UniformSequentialSubScopesProcessor individualProc = new UniformSequentialSubScopesProcessor();
-      SequentialProcessor individualSeqProc = new SequentialProcessor();
-      StochasticBranch cond = new StochasticBranch();
-      cond.GetVariableInfo("Probability").ActualName = "MutationRate";
-      OperatorExtractor manipulator = new OperatorExtractor();
-      manipulator.Name = "Manipulator (extr.)";
-      manipulator.GetVariableInfo("Operator").ActualName = "Manipulator";
-      OperatorExtractor evaluator = new OperatorExtractor();
-      evaluator.Name = "Evaluator (extr.)";
-      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
-      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
-      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
-      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      Counter evalCounter = new Counter();
-      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
-      SubScopesRemover parentRefRemover = new SubScopesRemover();
-
-      Sorter sorter = new Sorter();
-      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
-      sorter.GetVariableInfo("Value").ActualName = "Quality";
-
-
-      seq.AddSubOperator(selector);
-      seq.AddSubOperator(seqScopesProc);
-      seqScopesProc.AddSubOperator(emptyOpt);
-      seqScopesProc.AddSubOperator(selectedProc);
-      selectedProc.AddSubOperator(childInitializer);
-      selectedProc.AddSubOperator(individualProc);
-      individualProc.AddSubOperator(individualSeqProc);
-      individualSeqProc.AddSubOperator(crossover);
-      individualSeqProc.AddSubOperator(cond);
-      cond.AddSubOperator(manipulator);
-      individualSeqProc.AddSubOperator(evaluator);
-      individualSeqProc.AddSubOperator(validationEvaluator);
-      individualSeqProc.AddSubOperator(evalCounter);
-      individualSeqProc.AddSubOperator(parentRefRemover);
-      selectedProc.AddSubOperator(sorter);
-
-      childCreater.OperatorGraph.AddOperator(seq);
-      childCreater.OperatorGraph.InitialOperator = seq;
-      return childCreater;
-    }
-
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      AlgorithmBase clone = (AlgorithmBase)base.Clone(clonedObjects);
-      clonedObjects.Add(Guid, clone);
-      clone.engine = (SequentialEngine.SequentialEngine)Auxiliary.Clone(Engine, clonedObjects);
-      return clone;
-    }
-
-    protected VariableInjector GetVariableInjector() {
-      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
-      // SequentialProcessor in GP
-      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
-      return (VariableInjector)algorithm.SubOperators[2];
-    }
-
-    protected RandomInjector GetRandomInjector() {
-      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
-      // SequentialProcessor in GP
-      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
-      return (RandomInjector)algorithm.SubOperators[1];
-    }
-
-    #region Persistence Methods
-    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;
-    }
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      engine = (SequentialEngine.SequentialEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/And.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/And.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Average.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Average.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/BakedTreeEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/BakedTreeEvaluator.cs	(revision 1528)
+++ 	(revision )
@@ -1,314 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Constant.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Constant.cs	(revision 1528)
+++ 	(revision )
@@ -1,93 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Cosinus.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Cosinus.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Differential.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Differential.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Division.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Division.cs	(revision 1528)
+++ 	(revision )
@@ -1,57 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Equal.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Equal.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Exponential.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Exponential.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/FunctionLibraryInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/FunctionLibraryInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,205 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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 {
-  public class FunctionLibraryInjector : OperatorBase {
-    private const string TARGETVARIABLE = "TargetVariable";
-    private const string ALLOWEDFEATURES = "AllowedFeatures";
-    private const string FUNCTIONLIBRARY = "FunctionLibrary";
-
-    public override string Description {
-      get { return @"Injects a default function library for regression and 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) {
-      StructId.Variable variable;
-      GPOperatorLibrary operatorLibrary;
-
-      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);
-
-      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);
-
-      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 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: unk/sources/HeuristicLab.GP.StructureIdentification/GreaterThan.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/GreaterThan.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1528)
+++ 	(revision )
@@ -1,237 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="AlgorithmBase.cs" />
-    <Compile Include="Evaluators\MeanAbsolutePercentageOfRangeErrorEvaluator.cs" />
-    <Compile Include="FunctionLibraryInjector.cs" />
-    <Compile Include="OffspringSelectionGP.cs" />
-    <Compile Include="OffSpringSelectionGpEditor.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OffSpringSelectionGpEditor.Designer.cs">
-      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ProblemInjector.cs" />
-    <Compile Include="ProblemInjectorView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ProblemInjectorView.Designer.cs">
-      <DependentUpon>ProblemInjectorView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="StandardGpEditor.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="StandardGpEditor.Designer.cs">
-      <DependentUpon>StandardGpEditor.cs</DependentUpon>
-    </Compile>
-    <Compile Include="StandardGP.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="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.Evolutionary\HeuristicLab.Evolutionary.csproj">
-      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
-      <Name>HeuristicLab.Evolutionary</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.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>
-    <ProjectReference Include="..\HeuristicLab.Selection.OffspringSelection\HeuristicLab.Selection.OffspringSelection.csproj">
-      <Project>{205898D3-2717-4686-AF17-52409B7EC0C6}</Project>
-      <Name>HeuristicLab.Selection.OffspringSelection</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>
-    <EmbeddedResource Include="OffSpringSelectionGpEditor.resx">
-      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ProblemInjectorView.resx">
-      <DependentUpon>ProblemInjectorView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="StandardGpEditor.resx">
-      <DependentUpon>StandardGpEditor.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: unk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLabGPStructureIdentificationPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLabGPStructureIdentificationPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification-3.3.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.Evolutionary-3.2")]
-  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
-  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Operators.Programmable-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Selection-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Selection.OffspringSelection-3.2")]
-  [Dependency(Dependency = "HeuristicLab.SequentialEngine-3.2")]
-  public class HeuristicLabGPStructureIdentificationPlugin : PluginBase {
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/IfThenElse.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/IfThenElse.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/LessThan.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/LessThan.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Logarithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Logarithm.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/ModelAnalyzerExporter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/ModelAnalyzerExporter.cs	(revision 1528)
+++ 	(revision )
@@ -1,222 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Multiplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Multiplication.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Not.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Not.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,404 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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 OffspringSelectionGpEditor {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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.selectionPressureTextBox = new System.Windows.Forms.TextBox();
-      this.selectionPressureLabel = new System.Windows.Forms.Label();
-      this.viewProblemInitializationButton = new System.Windows.Forms.Button();
-      this.setProblemInitializationButton = new System.Windows.Forms.Button();
-      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
-      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
-      this.elitesTextBox = new System.Windows.Forms.TextBox();
-      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.maximumEvaluatedSolutionsTextBox = new System.Windows.Forms.TextBox();
-      this.maxEvaluatedSolutionsLabel = 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.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.selectionPressureTextBox);
-      this.parametersTabPage.Controls.Add(this.selectionPressureLabel);
-      this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
-      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
-      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
-      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
-      this.parametersTabPage.Controls.Add(this.elitesTextBox);
-      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.maximumEvaluatedSolutionsTextBox);
-      this.parametersTabPage.Controls.Add(this.maxEvaluatedSolutionsLabel);
-      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;
-      // 
-      // selectionPressureTextBox
-      // 
-      this.selectionPressureTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.selectionPressureTextBox.Location = new System.Drawing.Point(218, 130);
-      this.selectionPressureTextBox.Name = "selectionPressureTextBox";
-      this.selectionPressureTextBox.Size = new System.Drawing.Size(186, 20);
-      this.selectionPressureTextBox.TabIndex = 17;
-      // 
-      // selectionPressureLabel
-      // 
-      this.selectionPressureLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.selectionPressureLabel.AutoSize = true;
-      this.selectionPressureLabel.Location = new System.Drawing.Point(65, 133);
-      this.selectionPressureLabel.Name = "selectionPressureLabel";
-      this.selectionPressureLabel.Size = new System.Drawing.Size(145, 13);
-      this.selectionPressureLabel.TabIndex = 16;
-      this.selectionPressureLabel.Text = "Maximum &Selection Pressure:";
-      // 
-      // viewProblemInitializationButton
-      // 
-      this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 241);
-      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.viewProblemInjectorButton_Click);
-      // 
-      // setProblemInitializationButton
-      // 
-      this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 241);
-      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);
-      // 
-      // problemInitializationTextBox
-      // 
-      this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 241);
-      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;
-      this.setRandomSeedRandomlyCheckBox.CheckedChanged += new System.EventHandler(this.setRandomSeedRandomlyCheckBox_CheckedChanged);
-      // 
-      // elitesTextBox
-      // 
-      this.elitesTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.elitesTextBox.Location = new System.Drawing.Point(218, 182);
-      this.elitesTextBox.Name = "elitesTextBox";
-      this.elitesTextBox.Size = new System.Drawing.Size(186, 20);
-      this.elitesTextBox.TabIndex = 11;
-      // 
-      // problemInitializationLabel
-      // 
-      this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.problemInitializationLabel.AutoSize = true;
-      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 244);
-      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(66, 185);
-      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, 156);
-      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(66, 159);
-      this.mutationRateLabel.Name = "mutationRateLabel";
-      this.mutationRateLabel.Size = new System.Drawing.Size(77, 13);
-      this.mutationRateLabel.TabIndex = 8;
-      this.mutationRateLabel.Text = "&Mutation Rate:";
-      // 
-      // maximumEvaluatedSolutionsTextBox
-      // 
-      this.maximumEvaluatedSolutionsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.maximumEvaluatedSolutionsTextBox.Location = new System.Drawing.Point(218, 104);
-      this.maximumEvaluatedSolutionsTextBox.Name = "maximumEvaluatedSolutionsTextBox";
-      this.maximumEvaluatedSolutionsTextBox.Size = new System.Drawing.Size(186, 20);
-      this.maximumEvaluatedSolutionsTextBox.TabIndex = 7;
-      // 
-      // maxEvaluatedSolutionsLabel
-      // 
-      this.maxEvaluatedSolutionsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.maxEvaluatedSolutionsLabel.AutoSize = true;
-      this.maxEvaluatedSolutionsLabel.Location = new System.Drawing.Point(65, 107);
-      this.maxEvaluatedSolutionsLabel.Name = "maxEvaluatedSolutionsLabel";
-      this.maxEvaluatedSolutionsLabel.Size = new System.Drawing.Size(130, 13);
-      this.maxEvaluatedSolutionsLabel.TabIndex = 6;
-      this.maxEvaluatedSolutionsLabel.Text = "Max. E&valuated Solutions:";
-      // 
-      // 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);
-      // 
-      // OffspringSelectionGpEditor
-      // 
-      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 = "OffspringSelectionGpEditor";
-      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;
-    protected System.Windows.Forms.TabControl tabControl;
-    protected 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 maximumEvaluatedSolutionsTextBox;
-    private System.Windows.Forms.Label maxEvaluatedSolutionsLabel;
-    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.Button cloneEngineButton;
-    private System.Windows.Forms.TextBox problemInitializationTextBox;
-    private System.Windows.Forms.Button setProblemInitializationButton;
-    private HeuristicLab.Core.ScopeView scopeView;
-    private System.Windows.Forms.Button viewProblemInitializationButton;
-    private System.Windows.Forms.TextBox selectionPressureTextBox;
-    private System.Windows.Forms.Label selectionPressureLabel;
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,142 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.GP.StructureIdentification {
-  public partial class OffspringSelectionGpEditor : EditorBase {
-    private ChooseOperatorDialog chooseOperatorDialog;
-
-    public OffspringSelectionGP OffspringSelectionGP {
-      get { return (OffspringSelectionGP)Item; }
-      set { base.Item = value; }
-    }
-
-    public OffspringSelectionGpEditor() {
-      InitializeComponent();
-    }
-    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
-      : this() {
-      OffspringSelectionGP = osgp;
-    }
-
-    protected override void RemoveItemEvents() {
-      OffspringSelectionGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
-      OffspringSelectionGP.Engine.Finished -= new EventHandler(Engine_Finished);
-      scopeView.Scope = null;
-      base.RemoveItemEvents();
-    }
-
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      OffspringSelectionGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
-      OffspringSelectionGP.Engine.Finished += new EventHandler(Engine_Finished);
-      SetDataBinding();
-      scopeView.Scope = OffspringSelectionGP.Engine.GlobalScope;
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if (OffspringSelectionGP == null) {
-        tabControl.Enabled = false;
-      } else {
-        tabControl.Enabled = true;
-        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
-      }
-    }
-
-    protected virtual void SetDataBinding() {
-      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", OffspringSelectionGP, "SetSeedRandomly");
-      randomSeedTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Seed");
-      populationSizeTextBox.DataBindings.Add("Text", OffspringSelectionGP, "PopulationSize");
-      maximumEvaluatedSolutionsTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MaxEvaluatedSolutions");
-      selectionPressureTextBox.DataBindings.Add("Text", OffspringSelectionGP, "SelectionPressureLimit");
-      mutationRateTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MutationRate");
-      elitesTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Elites");
-    }
-
-    #region Button Events
-    private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
-      IView view = OffspringSelectionGP.ProblemInjector.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) {
-        OffspringSelectionGP.ProblemInjector = chooseOperatorDialog.Operator;
-        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
-      }
-    }
-    private void executeButton_Click(object sender, EventArgs e) {
-      executeButton.Enabled = false;
-      abortButton.Enabled = true;
-      resetButton.Enabled = false;
-      OffspringSelectionGP.Engine.Execute();
-    }
-    private void abortButton_Click(object sender, EventArgs e) {
-      OffspringSelectionGP.Engine.Abort();
-    }
-    private void resetButton_Click(object sender, EventArgs e) {
-      OffspringSelectionGP.Engine.Reset();
-    }
-    private void cloneEngineButton_Click(object sender, EventArgs e) {
-      IEngine clone = (IEngine)OffspringSelectionGP.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) {
-      if(InvokeRequired)
-        Invoke((EventHandler)Engine_Finished, sender, e);
-      else {
-        scopeView.Refresh();
-        executeButton.Enabled = true;
-        abortButton.Enabled = false;
-        resetButton.Enabled = true;
-      }
-    }
-    #endregion
-
-    private void setRandomSeedRandomlyCheckBox_CheckedChanged(object sender, EventArgs e) {
-      randomSeedTextBox.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
-      randomSeedLabel.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1528)
+++ 	(revision )
@@ -1,277 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Operators;
-using HeuristicLab.Random;
-using HeuristicLab.Selection;
-using HeuristicLab.Logging;
-using HeuristicLab.Data;
-using HeuristicLab.Operators.Programmable;
-using HeuristicLab.Selection.OffspringSelection;
-using HeuristicLab.Evolutionary;
-
-namespace HeuristicLab.GP.StructureIdentification {
-  public class OffspringSelectionGP : StandardGP {
-
-    public virtual int MaxEvaluatedSolutions {
-      get { return GetVariableInjector().GetVariable("MaxEvaluatedSolutions").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("MaxEvaluatedSolutions").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual double SelectionPressureLimit {
-      get { return GetVariableInjector().GetVariable("SelectionPressureLimit").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("SelectionPressureLimit").GetValue<DoubleData>().Data = value; }
-    }
-
-    public virtual double ComparisonFactor {
-      get { return GetVariableInjector().GetVariable("ComparisonFactor").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("ComparisonFactor").GetValue<DoubleData>().Data = value; }
-    }
-
-    public virtual double SuccessRatioLimit {
-      get { return GetVariableInjector().GetVariable("SuccessRatioLimit").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("SuccessRatioLimit").GetValue<DoubleData>().Data = value; }
-    }
-
-    public override int MaxGenerations {
-      get { throw new NotSupportedException(); }
-      set { /* ignore */ }
-    }
-
-    public override int TournamentSize {
-      get { throw new NotSupportedException(); }
-      set { /* ignore */ }
-    }
-
-    public OffspringSelectionGP()
-      : base() {
-      PopulationSize = 1000;
-      Parents = 20;
-      MaxEvaluatedSolutions = 1000000;
-      SelectionPressureLimit = 300;
-      ComparisonFactor = 1.0;
-      SuccessRatioLimit = 1.0;
-    }
-
-    protected internal override IOperator CreateGlobalInjector() {
-      VariableInjector injector = (VariableInjector)base.CreateGlobalInjector();
-      injector.RemoveVariable("TournamentSize");
-      injector.RemoveVariable("MaxGenerations");
-      injector.AddVariable(new HeuristicLab.Core.Variable("MaxEvaluatedSolutions", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("ComparisonFactor", new DoubleData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("SelectionPressureLimit", new DoubleData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("SuccessRatioLimit", new DoubleData()));
-      return injector;
-    }
-
-    protected internal override IOperator CreateSelector() {
-      CombinedOperator selector = new CombinedOperator();
-      selector.Name = "Selector";
-      SequentialProcessor seq = new SequentialProcessor();
-      seq.Name = "Selector";
-      EmptyOperator emptyOp = new EmptyOperator();
-      ProportionalSelector femaleSelector = new ProportionalSelector();
-      femaleSelector.GetVariableInfo("Selected").ActualName = "Parents";
-      femaleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
-
-      RandomSelector maleSelector = new RandomSelector();
-      maleSelector.GetVariableInfo("Selected").ActualName = "Parents";
-      maleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
-      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
-      RightChildReducer rightChildReducer = new RightChildReducer();
-      SubScopesMixer mixer = new SubScopesMixer();
-
-      seqSubScopesProc.AddSubOperator(femaleSelector);
-      seqSubScopesProc.AddSubOperator(emptyOp);
-
-      seq.AddSubOperator(maleSelector);
-      seq.AddSubOperator(seqSubScopesProc);
-      seq.AddSubOperator(rightChildReducer);
-      seq.AddSubOperator(mixer);
-
-      selector.OperatorGraph.AddOperator(seq);
-      selector.OperatorGraph.InitialOperator = seq;
-      return selector;
-    }
-
-    protected internal override IOperator CreateChildCreater() {
-      CombinedOperator childCreater = new CombinedOperator();
-      childCreater.Name = "Create children";
-      SequentialProcessor main = new SequentialProcessor();
-      SequentialProcessor seq = new SequentialProcessor();
-      SequentialProcessor offspringSelectionSeq = new SequentialProcessor();
-      OperatorExtractor selector = new OperatorExtractor();
-      selector.Name = "Selector (extr.)";
-      selector.GetVariableInfo("Operator").ActualName = "Selector";
-      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
-      EmptyOperator emptyOp = new EmptyOperator();
-      OffspringSelector offspringSelector = new OffspringSelector();
-      ChildrenInitializer childInitializer = new ChildrenInitializer();
-      UniformSequentialSubScopesProcessor individualProc = new UniformSequentialSubScopesProcessor();
-      SequentialProcessor individualSeqProc = new SequentialProcessor();
-      OperatorExtractor crossover = new OperatorExtractor();
-      crossover.Name = "Crossover (extr.)";
-      crossover.GetVariableInfo("Operator").ActualName = "Crossover";
-      StochasticBranch cond = new StochasticBranch();
-      cond.GetVariableInfo("Probability").ActualName = "MutationRate";
-      OperatorExtractor manipulator = new OperatorExtractor();
-      manipulator.Name = "Manipulator (extr.)";
-      manipulator.GetVariableInfo("Operator").ActualName = "Manipulator";
-      OperatorExtractor evaluator = new OperatorExtractor();
-      evaluator.Name = "Evaluator (extr.)";
-      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
-      Counter evalCounter = new Counter();
-      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
-      WeightedOffspringFitnessComparer offspringFitnessComparer = new WeightedOffspringFitnessComparer();
-      SubScopesRemover parentScopesRemover = new SubScopesRemover();
-
-      Sorter sorter = new Sorter();
-      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
-      sorter.GetVariableInfo("Value").ActualName = "Quality";
-
-      UniformSequentialSubScopesProcessor validationEvaluator = new UniformSequentialSubScopesProcessor();
-      MeanSquaredErrorEvaluator validationQualityEvaluator = new MeanSquaredErrorEvaluator();
-      validationQualityEvaluator.Name = "ValidationMeanSquaredErrorEvaluator";
-      validationQualityEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
-      validationQualityEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationQualityEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-
-      main.AddSubOperator(seq);
-      seq.AddSubOperator(selector);
-      seq.AddSubOperator(seqSubScopesProc);
-      seqSubScopesProc.AddSubOperator(emptyOp);
-      seqSubScopesProc.AddSubOperator(offspringSelectionSeq);
-      seq.AddSubOperator(offspringSelector);
-      offspringSelector.AddSubOperator(seq);
-
-      offspringSelectionSeq.AddSubOperator(childInitializer);
-      offspringSelectionSeq.AddSubOperator(individualProc);
-      offspringSelectionSeq.AddSubOperator(sorter);
-
-      individualProc.AddSubOperator(individualSeqProc);
-      individualSeqProc.AddSubOperator(crossover);
-      individualSeqProc.AddSubOperator(cond);
-      cond.AddSubOperator(manipulator);
-      individualSeqProc.AddSubOperator(evaluator);
-      individualSeqProc.AddSubOperator(evalCounter);
-      individualSeqProc.AddSubOperator(offspringFitnessComparer);
-      individualSeqProc.AddSubOperator(parentScopesRemover);
-
-      SequentialSubScopesProcessor seqSubScopesProc2 = new SequentialSubScopesProcessor();
-      main.AddSubOperator(seqSubScopesProc2);
-      seqSubScopesProc2.AddSubOperator(emptyOp);
-
-      SequentialProcessor newGenProc = new SequentialProcessor();
-      newGenProc.AddSubOperator(sorter);
-      newGenProc.AddSubOperator(validationEvaluator);
-      seqSubScopesProc2.AddSubOperator(newGenProc);
-
-      validationEvaluator.AddSubOperator(validationQualityEvaluator);
-
-      childCreater.OperatorGraph.AddOperator(main);
-      childCreater.OperatorGraph.InitialOperator = main;
-      return childCreater;
-    }
-
-    protected internal override IOperator CreateLoopCondition(IOperator loop) {
-      SequentialProcessor seq = new SequentialProcessor();
-      seq.Name = "Loop Condition";
-      LessThanComparator generationsComparator = new LessThanComparator();
-      generationsComparator.GetVariableInfo("LeftSide").ActualName = "EvaluatedSolutions";
-      generationsComparator.GetVariableInfo("RightSide").ActualName = "MaxEvaluatedSolutions";
-      generationsComparator.GetVariableInfo("Result").ActualName = "EvaluatedSolutionsCondition";
-
-      LessThanComparator selPresComparator = new LessThanComparator();
-      selPresComparator.GetVariableInfo("LeftSide").ActualName = "SelectionPressure";
-      selPresComparator.GetVariableInfo("RightSide").ActualName = "SelectionPressureLimit";
-      selPresComparator.GetVariableInfo("Result").ActualName = "SelectionPressureCondition";
-
-      ConditionalBranch generationsCond = new ConditionalBranch();
-      generationsCond.GetVariableInfo("Condition").ActualName = "EvaluatedSolutionsCondition";
-
-      ConditionalBranch selPresCond = new ConditionalBranch();
-      selPresCond.GetVariableInfo("Condition").ActualName = "SelectionPressureCondition";
-
-      seq.AddSubOperator(generationsComparator);
-      seq.AddSubOperator(selPresComparator);
-      seq.AddSubOperator(generationsCond);
-      generationsCond.AddSubOperator(selPresCond);
-      selPresCond.AddSubOperator(loop);
-
-      return seq;
-    }
-
-    protected internal override IOperator CreateLoggingOperator() {
-      CombinedOperator loggingOperator = new CombinedOperator();
-      loggingOperator.Name = "Logging";
-      SequentialProcessor seq = new SequentialProcessor();
-
-      DataCollector collector = new DataCollector();
-      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
-      names.Add(new StringData("BestQuality"));
-      names.Add(new StringData("AverageQuality"));
-      names.Add(new StringData("WorstQuality"));
-      names.Add(new StringData("BestValidationQuality"));
-      names.Add(new StringData("AverageValidationQuality"));
-      names.Add(new StringData("WorstValidationQuality"));
-      names.Add(new StringData("EvaluatedSolutions"));
-      names.Add(new StringData("SelectionPressure"));
-      QualityLogger qualityLogger = new QualityLogger();
-      QualityLogger validationQualityLogger = new QualityLogger();
-      validationQualityLogger.Name = "ValidationQualityLogger";
-      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
-      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
-
-      seq.AddSubOperator(collector);
-      seq.AddSubOperator(qualityLogger);
-      seq.AddSubOperator(validationQualityLogger);
-
-      loggingOperator.OperatorGraph.AddOperator(seq);
-      loggingOperator.OperatorGraph.InitialOperator = seq;
-      return loggingOperator;
-    }
-
-
-    public override IEditor CreateEditor() {
-      return new OffspringSelectionGpEditor(this);
-    }
-
-    public override IView CreateView() {
-      return new OffspringSelectionGpEditor(this);
-    }
-
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      OffspringSelectionGP clone = (OffspringSelectionGP)base.Clone(clonedObjects);
-      clone.SelectionPressureLimit = SelectionPressureLimit;
-      clone.SuccessRatioLimit = SuccessRatioLimit;
-      clone.ComparisonFactor = ComparisonFactor;
-      return clone;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/Or.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Or.cs	(revision 1528)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Power.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Power.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjector.cs	(revision 1528)
+++ 	(revision )
@@ -1,90 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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 ProblemInjector : Core.OperatorBase {
-    public override string Description {
-      get { return @"Injects the necessary variables for a structure identification problem."; }
-    }
-
-    public ProblemInjector()
-      : 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 ProblemInjectorView(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: unk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,213 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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 ProblemInjectorView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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: unk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.cs	(revision 1528)
+++ 	(revision )
@@ -1,158 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 ProblemInjectorView : ViewBase {
-    public ProblemInjector ProblemInjector {
-      get { return (ProblemInjector)Item; }
-      set { base.Item = value; }
-    }
-
-    public ProblemInjectorView()
-      : base() {
-      InitializeComponent();
-    }
-    public ProblemInjectorView(ProblemInjector problemInjector)
-      : this() {
-      ProblemInjector = problemInjector;
-      variablesView.Operator = problemInjector;
-      variablesView.Update();
-    }
-
-    protected override void RemoveItemEvents() {
-      operatorBaseVariableInfosView.Operator = null;
-      operatorBaseDescriptionView.Operator = null;
-      base.RemoveItemEvents();
-    }
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      operatorBaseVariableInfosView.Operator = ProblemInjector;
-      operatorBaseDescriptionView.Operator = ProblemInjector;
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if (ProblemInjector == null) {
-        importInstanceButton.Enabled = false;
-      } else {
-        Dataset dataset = (Dataset)ProblemInjector.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)ProblemInjector.GetVariable("Dataset").Value;
-          dataset.Rows = parser.Rows;
-          dataset.Columns = parser.Columns;
-          for (int i = 0; i < parser.VariableNames.Length; i++) {
-            dataset.SetVariableName(i, parser.VariableNames[i]);
-          }
-          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 = ProblemInjector.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 = ProblemInjector.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: unk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP.StructureIdentification/Signum.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Signum.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Sinus.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Sinus.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Sqrt.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Sqrt.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1528)
+++ 	(revision )
@@ -1,297 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-using HeuristicLab.Operators;
-using HeuristicLab.Random;
-using HeuristicLab.Selection;
-using HeuristicLab.Logging;
-using HeuristicLab.Data;
-using HeuristicLab.Operators.Programmable;
-
-namespace HeuristicLab.GP.StructureIdentification {
-  public class StandardGP : AlgorithmBase, IEditable {
-
-    public virtual int MaxGenerations {
-      get { return GetVariableInjector().GetVariable("MaxGenerations").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("MaxGenerations").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual int TournamentSize {
-      get { return GetVariableInjector().GetVariable("TournamentSize").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("TournamentSize").GetValue<IntData>().Data = value; }
-    }
-
-    public double FullTreeShakingFactor {
-      get { return GetVariableInjector().GetVariable("FullTreeShakingFactor").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("FullTreeShakingFactor").GetValue<DoubleData>().Data = value; }
-    }
-
-    public double OnePointShakingFactor {
-      get { return GetVariableInjector().GetVariable("OnePointShakingFactor").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("OnePointShakingFactor").GetValue<DoubleData>().Data = value; }
-    }
-
-    public int MinInitialTreeSize {
-      get { return GetVariableInjector().GetVariable("MinInitialTreeSize").GetValue<IntData>().Data; }
-      set { GetVariableInjector().GetVariable("MinInitialTreeSize").GetValue<IntData>().Data = value; }
-    }
-
-    public override int MaxTreeSize {
-      get {
-        return base.MaxTreeSize;
-      }
-      set {
-        base.MaxTreeSize = value;
-        MinInitialTreeSize = value / 2;
-      }
-    }
-
-    public override int PopulationSize {
-      get {
-        return base.PopulationSize;
-      }
-      set {
-        base.PopulationSize = value;
-        Parents = 2 * value;
-      }
-    }
-
-    public StandardGP()
-      : base() {
-      PopulationSize = 10000;
-      MaxGenerations = 100;
-      TournamentSize = 7;
-      MutationRate = 0.15;
-      Elites = 1;
-      MaxTreeSize = 100;
-      MaxTreeHeight = 10;
-      FullTreeShakingFactor = 0.1;
-      OnePointShakingFactor = 1.0;
-      PunishmentFactor = 10.0;
-      UseEstimatedTargetValue = false;
-      SetSeedRandomly = true;
-    }
-
-    protected internal override IOperator CreateProblemInjector() {
-      return new ProblemInjector();
-    }
-
-    protected internal override IOperator CreateSelector() {
-      TournamentSelector selector = new TournamentSelector();
-      selector.Name = "Selector";
-      selector.GetVariableInfo("Selected").ActualName = "Parents";
-      selector.GetVariableInfo("GroupSize").Local = false;
-      selector.RemoveVariable("GroupSize");
-      selector.GetVariableInfo("GroupSize").ActualName = "TournamentSize";
-      return selector;
-    }
-
-    protected internal override IOperator CreateGlobalInjector() {
-      VariableInjector globalInjector = (VariableInjector)base.CreateGlobalInjector();
-      globalInjector.AddVariable(new HeuristicLab.Core.Variable("TournamentSize", new IntData()));
-      globalInjector.AddVariable(new HeuristicLab.Core.Variable("MaxGenerations", new IntData()));
-      globalInjector.AddVariable(new HeuristicLab.Core.Variable("FullTreeShakingFactor", new DoubleData()));
-      globalInjector.AddVariable(new HeuristicLab.Core.Variable("OnePointShakingFactor", new DoubleData()));
-      globalInjector.AddVariable(new HeuristicLab.Core.Variable("MinInitialTreeSize", new IntData()));
-      return globalInjector;
-    }
-
-    protected internal override IOperator CreateCrossover() {
-      StandardCrossOver crossover = new StandardCrossOver();
-      crossover.Name = "Crossover";
-      crossover.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      return crossover;
-    }
-
-    protected internal override IOperator CreateTreeCreator() {
-      ProbabilisticTreeCreator treeCreator = new ProbabilisticTreeCreator();
-      treeCreator.Name = "Tree generator";
-      treeCreator.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      treeCreator.GetVariableInfo("MinTreeSize").ActualName = "MinInitialTreeSize";
-      return treeCreator;
-    }
-
-    protected internal override IOperator CreateFunctionLibraryInjector() {
-      return new FunctionLibraryInjector();
-    }
-
-    protected internal override IOperator CreateManipulator() {
-      CombinedOperator manipulator = new CombinedOperator();
-      manipulator.Name = "Manipulator";
-      StochasticMultiBranch multibranch = new StochasticMultiBranch();
-      FullTreeShaker fullTreeShaker = new FullTreeShaker();
-      fullTreeShaker.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      fullTreeShaker.GetVariableInfo("ShakingFactor").ActualName = "FullTreeShakingFactor";
-
-      OnePointShaker onepointShaker = new OnePointShaker();
-      onepointShaker.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      onepointShaker.GetVariableInfo("ShakingFactor").ActualName = "OnePointShakingFactor";
-      ChangeNodeTypeManipulation changeNodeTypeManipulation = new ChangeNodeTypeManipulation();
-      changeNodeTypeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      CutOutNodeManipulation cutOutNodeManipulation = new CutOutNodeManipulation();
-      cutOutNodeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      DeleteSubTreeManipulation deleteSubTreeManipulation = new DeleteSubTreeManipulation();
-      deleteSubTreeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-      SubstituteSubTreeManipulation substituteSubTreeManipulation = new SubstituteSubTreeManipulation();
-      substituteSubTreeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
-
-      IOperator[] manipulators = new IOperator[] {
-        onepointShaker, fullTreeShaker,
-        changeNodeTypeManipulation,
-        cutOutNodeManipulation,
-        deleteSubTreeManipulation,
-        substituteSubTreeManipulation};
-
-      DoubleArrayData probabilities = new DoubleArrayData(new double[manipulators.Length]);
-      for (int i = 0; i < manipulators.Length; i++) {
-        probabilities.Data[i] = 1.0;
-        multibranch.AddSubOperator(manipulators[i]);
-      }
-      multibranch.GetVariableInfo("Probabilities").Local = true;
-      multibranch.AddVariable(new HeuristicLab.Core.Variable("Probabilities", probabilities));
-
-      manipulator.OperatorGraph.AddOperator(multibranch);
-      manipulator.OperatorGraph.InitialOperator = multibranch;
-      return manipulator;
-    }
-
-    protected internal override IOperator CreateBestSolutionProcessor() {
-      SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
-      MeanSquaredErrorEvaluator testMseEvaluator = new MeanSquaredErrorEvaluator();
-      testMseEvaluator.Name = "TestMeanSquaredErrorEvaluator";
-      testMseEvaluator.GetVariableInfo("MSE").ActualName = "TestQuality";
-      testMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
-      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
-      trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
-      trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-      trainingMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-      MeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
-      validationMapeEvaluator.Name = "ValidationMapeEvaluator";
-      validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
-      validationMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      MeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
-      testMapeEvaluator.Name = "TestMapeEvaluator";
-      testMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TestMAPE";
-      testMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      MeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
-      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
-      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
-      trainingMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-      trainingMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-      MeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
-      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
-      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
-      validationMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      MeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
-      testMapreEvaluator.Name = "TestMapreEvaluator";
-      testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
-      testMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      CoefficientOfDeterminationEvaluator trainingR2Evaluator = new CoefficientOfDeterminationEvaluator();
-      trainingR2Evaluator.Name = "TrainingR2Evaluator";
-      trainingR2Evaluator.GetVariableInfo("R2").ActualName = "TrainingR2";
-      trainingR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-      trainingR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-      CoefficientOfDeterminationEvaluator validationR2Evaluator = new CoefficientOfDeterminationEvaluator();
-      validationR2Evaluator.Name = "ValidationR2Evaluator";
-      validationR2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
-      validationR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      CoefficientOfDeterminationEvaluator testR2Evaluator = new CoefficientOfDeterminationEvaluator();
-      testR2Evaluator.Name = "TestR2Evaluator";
-      testR2Evaluator.GetVariableInfo("R2").ActualName = "TestR2";
-      testR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      ProgrammableOperator progOperator = new ProgrammableOperator();
-      progOperator.RemoveVariableInfo("Result");
-      progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
-      progOperator.Code = @"
-int evalSolutions = EvaluatedSolutions.Data;
-scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
-";
-      bestSolutionProcessor.AddSubOperator(testMseEvaluator);
-      bestSolutionProcessor.AddSubOperator(trainingMapeEvaluator);
-      bestSolutionProcessor.AddSubOperator(validationMapeEvaluator);
-      bestSolutionProcessor.AddSubOperator(testMapeEvaluator);
-      bestSolutionProcessor.AddSubOperator(trainingMapreEvaluator);
-      bestSolutionProcessor.AddSubOperator(validationMapreEvaluator);
-      bestSolutionProcessor.AddSubOperator(testMapreEvaluator);
-      bestSolutionProcessor.AddSubOperator(trainingR2Evaluator);
-      bestSolutionProcessor.AddSubOperator(validationR2Evaluator);
-      bestSolutionProcessor.AddSubOperator(testR2Evaluator);
-      bestSolutionProcessor.AddSubOperator(progOperator);
-      return bestSolutionProcessor;
-    }
-
-    protected internal override IOperator CreateLoggingOperator() {
-      CombinedOperator loggingOperator = new CombinedOperator();
-      loggingOperator.Name = "Logging";
-      SequentialProcessor seq = new SequentialProcessor();
-
-      DataCollector collector = new DataCollector();
-      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
-      names.Add(new StringData("BestQuality"));
-      names.Add(new StringData("AverageQuality"));
-      names.Add(new StringData("WorstQuality"));
-      names.Add(new StringData("BestValidationQuality"));
-      names.Add(new StringData("AverageValidationQuality"));
-      names.Add(new StringData("WorstValidationQuality"));
-      LinechartInjector lineChartInjector = new LinechartInjector();
-      lineChartInjector.GetVariableInfo("Linechart").ActualName = "Quality Linechart";
-      lineChartInjector.GetVariable("NumberOfLines").GetValue<IntData>().Data = 6;
-      QualityLogger qualityLogger = new QualityLogger();
-      QualityLogger validationQualityLogger = new QualityLogger();
-      validationQualityLogger.Name = "ValidationQualityLogger";
-      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
-      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
-
-      seq.AddSubOperator(collector);
-      seq.AddSubOperator(lineChartInjector);
-      seq.AddSubOperator(qualityLogger);
-      seq.AddSubOperator(validationQualityLogger);
-
-      loggingOperator.OperatorGraph.AddOperator(seq);
-      loggingOperator.OperatorGraph.InitialOperator = seq;
-      return loggingOperator;
-    }
-
-    public virtual IEditor CreateEditor() {
-      return new StandardGpEditor(this);
-    }
-
-    public override IView CreateView() {
-      return new StandardGpEditor(this);
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,380 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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 StandardGpEditor {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any 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.viewProblemInitializationButton = new System.Windows.Forms.Button();
-      this.setProblemInitializationButton = new System.Windows.Forms.Button();
-      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
-      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
-      this.elitesTextBox = new System.Windows.Forms.TextBox();
-      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.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.viewProblemInitializationButton);
-      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
-      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
-      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
-      this.parametersTabPage.Controls.Add(this.elitesTextBox);
-      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;
-      // 
-      // 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.viewProblemInjectorButton_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);
-      // 
-      // 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;
-      this.setRandomSeedRandomlyCheckBox.CheckedChanged += new System.EventHandler(this.setRandomSeedRandomlyCheckBox_CheckedChanged);
-      // 
-      // 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;
-      // 
-      // 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);
-      // 
-      // StandardGpEditor
-      // 
-      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 = "StandardGpEditor";
-      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;
-    protected System.Windows.Forms.TabControl tabControl;
-    protected 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.Button cloneEngineButton;
-    private System.Windows.Forms.TextBox problemInitializationTextBox;
-    private System.Windows.Forms.Button setProblemInitializationButton;
-    private HeuristicLab.Core.ScopeView scopeView;
-    private System.Windows.Forms.Button viewProblemInitializationButton;
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,140 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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.GP.StructureIdentification {
-  public partial class StandardGpEditor : EditorBase {
-    private ChooseOperatorDialog chooseOperatorDialog;
-
-    public StandardGP StandardGP {
-      get { return (StandardGP)Item; }
-      set { base.Item = value; }
-    }
-
-    public StandardGpEditor() {
-      InitializeComponent();
-    }
-    public StandardGpEditor(StandardGP sgp)
-      : this() {
-      StandardGP = sgp;
-    }
-
-    protected override void RemoveItemEvents() {
-      StandardGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
-      StandardGP.Engine.Finished -= new EventHandler(Engine_Finished);
-      scopeView.Scope = null;
-      base.RemoveItemEvents();
-    }
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      StandardGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
-      StandardGP.Engine.Finished += new EventHandler(Engine_Finished);
-      SetDataBinding();
-      scopeView.Scope = StandardGP.Engine.GlobalScope;
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if(StandardGP == null) {
-        tabControl.Enabled = false;
-      } else {
-        tabControl.Enabled = true;
-        problemInitializationTextBox.Text = StandardGP.ProblemInjector.GetType().Name;
-      }
-    }
-
-    protected virtual void SetDataBinding() {
-      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", StandardGP, "SetSeedRandomly");
-      randomSeedTextBox.DataBindings.Add("Text", StandardGP, "Seed");
-      populationSizeTextBox.DataBindings.Add("Text", StandardGP, "PopulationSize");
-      maximumGenerationsTextBox.DataBindings.Add("Text", StandardGP, "MaxGenerations");
-      mutationRateTextBox.DataBindings.Add("Text", StandardGP, "MutationRate");
-      elitesTextBox.DataBindings.Add("Text", StandardGP, "Elites");
-    }
-
-    #region Button Events
-    private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
-      IView view = StandardGP.ProblemInjector.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) {
-        StandardGP.ProblemInjector = chooseOperatorDialog.Operator;
-        problemInitializationTextBox.Text = StandardGP.ProblemInjector.GetType().Name;
-      }
-    }
-    private void executeButton_Click(object sender, EventArgs e) {
-      executeButton.Enabled = false;
-      abortButton.Enabled = true;
-      resetButton.Enabled = false;
-      StandardGP.Engine.Execute();
-    }
-    private void abortButton_Click(object sender, EventArgs e) {
-      StandardGP.Engine.Abort();
-    }
-    private void resetButton_Click(object sender, EventArgs e) {
-      StandardGP.Engine.Reset();
-    }
-    private void cloneEngineButton_Click(object sender, EventArgs e) {
-      IEngine clone = (IEngine)StandardGP.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) {
-      if(InvokeRequired)
-        Invoke((EventHandler)Engine_Finished, sender, e);
-      else {
-        scopeView.Refresh();
-        executeButton.Enabled = true;
-        abortButton.Enabled = false;
-        resetButton.Enabled = true;
-      }
-    }
-    #endregion
-
-    private void setRandomSeedRandomlyCheckBox_CheckedChanged(object sender, EventArgs e) {
-      randomSeedTextBox.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
-      randomSeedLabel.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP.StructureIdentification/Subtraction.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Subtraction.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/SymbolTable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/SymbolTable.cs	(revision 1528)
+++ 	(revision )
@@ -1,93 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/SymbolicExpressionExporter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/SymbolicExpressionExporter.cs	(revision 1528)
+++ 	(revision )
@@ -1,219 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP.StructureIdentification/Tangens.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Tangens.cs	(revision 1528)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Variable.cs	(revision 1528)
+++ 	(revision )
@@ -1,210 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP.StructureIdentification/Xor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/Xor.cs	(revision 1528)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: /trunk/sources/HeuristicLab.GP/3.3/BakedFunctionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/BakedFunctionTree.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/BakedFunctionTree.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/DefaultFunctionTreeNameGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/DefaultFunctionTreeNameGenerator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/DefaultFunctionTreeNameGenerator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/EqualiserController.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/EqualiserController.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/EqualiserController.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/FunctionBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/FunctionBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/FunctionBase.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/FunctionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/FunctionView.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/FunctionView.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/FunctionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/FunctionView.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/FunctionView.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/FunctionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/FunctionView.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/FunctionView.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/GPOperatorGroup.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/GPOperatorGroup.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/GPOperatorGroup.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibrary.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibrary.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibrary.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.Designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.Designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/GPOperatorLibraryEditor.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/HeuristicLab.GP.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/HeuristicLab.GP.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/HeuristicLab.GP.csproj	(revision 1529)
@@ -0,0 +1,193 @@
+﻿<?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.3</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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="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="TrainingWindowSlider.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.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.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: /trunk/sources/HeuristicLab.GP/3.3/HeuristicLabGPPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/HeuristicLabGPPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/HeuristicLabGPPlugin.cs	(revision 1529)
@@ -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 {
+  [ClassInfo(Name = "HeuristicLab.GP-3.3")]
+  [PluginFile(Filename = "HeuristicLab.GP-3.3.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.Evolutionary-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: /trunk/sources/HeuristicLab.GP/3.3/IFunction.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/IFunction.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/IFunction.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/IFunctionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/IFunctionTree.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/IFunctionTree.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/IFunctionTreeExporter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/IFunctionTreeExporter.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/IFunctionTreeExporter.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/IFunctionTreeNameGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/IFunctionTreeNameGenerator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/IFunctionTreeNameGenerator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Logging/TreeArityAnalyser.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Logging/TreeArityAnalyser.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Logging/TreeArityAnalyser.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Manipulation/ChangeNodeTypeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Manipulation/ChangeNodeTypeManipulation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Manipulation/ChangeNodeTypeManipulation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Manipulation/CutOutNodeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Manipulation/CutOutNodeManipulation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Manipulation/CutOutNodeManipulation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Manipulation/DeleteSubTreeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Manipulation/DeleteSubTreeManipulation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Manipulation/DeleteSubTreeManipulation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Manipulation/FullTreeShaker.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Manipulation/FullTreeShaker.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Manipulation/FullTreeShaker.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Manipulation/OnePointShaker.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Manipulation/OnePointShaker.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Manipulation/OnePointShaker.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Manipulation/SubstituteSubTreeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Manipulation/SubstituteSubTreeManipulation.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Manipulation/SubstituteSubTreeManipulation.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/OffspringEqualiser.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/OffspringEqualiser.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/OffspringEqualiser.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/ProbabilisticTreeCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/ProbabilisticTreeCreator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/ProbabilisticTreeCreator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.GP/3.3/RampedTreeCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/RampedTreeCreator.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/RampedTreeCreator.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Recombination/GPCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/GPCrossoverBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/GPCrossoverBase.cs	(revision 1529)
@@ -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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.GP {
+  public abstract class GPCrossoverBase : CrossoverBase {
+    public GPCrossoverBase()
+      : base() {
+      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));
+    }
+
+    internal abstract IFunctionTree Cross(IScope scope, TreeGardener gardener, IRandom random, IFunctionTree tree0, IFunctionTree tree1);
+
+    protected override void Cross(IScope scope, IRandom random) {
+      GPOperatorLibrary opLibrary = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      TreeGardener gardener = new TreeGardener(random, opLibrary);
+
+      if (scope.SubScopes.Count != 2)
+        throw new InvalidOperationException("Number of parents must be exactly two.");
+
+      IFunctionTree parent0 = GetVariableValue<IFunctionTree>("FunctionTree", scope.SubScopes[0], false);
+      IFunctionTree parent1 = GetVariableValue<IFunctionTree>("FunctionTree", scope.SubScopes[1], false);
+
+      // 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));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("FunctionTree"), child));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeSize"), new IntData(child.Size)));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeHeight"), new IntData(child.Height)));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP/3.3/Recombination/LangdonHomologousCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/LangdonHomologousCrossOver.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/LangdonHomologousCrossOver.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/Recombination/OnePointCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/OnePointCrossOver.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/OnePointCrossOver.cs	(revision 1529)
@@ -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, IRandom 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: /trunk/sources/HeuristicLab.GP/3.3/Recombination/SizeConstrictedGPCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/SizeConstrictedGPCrossoverBase.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/SizeConstrictedGPCrossoverBase.cs	(revision 1529)
@@ -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, IRandom 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, IRandom 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: /trunk/sources/HeuristicLab.GP/3.3/Recombination/SizeFairCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/SizeFairCrossOver.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/SizeFairCrossOver.cs	(revision 1529)
@@ -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, IRandom 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((MersenneTwister)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: /trunk/sources/HeuristicLab.GP/3.3/Recombination/StandardCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/StandardCrossOver.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/StandardCrossOver.cs	(revision 1529)
@@ -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, IRandom 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: /trunk/sources/HeuristicLab.GP/3.3/Recombination/UniformCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/Recombination/UniformCrossover.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/Recombination/UniformCrossover.cs	(revision 1529)
@@ -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, IRandom 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: /trunk/sources/HeuristicLab.GP/3.3/TrainingWindowSlider.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/TrainingWindowSlider.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/TrainingWindowSlider.cs	(revision 1529)
@@ -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.Random;
+
+namespace HeuristicLab.GP {
+  public class TrainingWindowSlider : OperatorBase {
+
+    private const string TRAINING_SAMPLES_START = "TrainingSamplesStart";
+    private const string TRAINING_SAMPLES_END = "TrainingSamplesEnd";
+    private const string TRAINING_WINDOW_START = "TrainingWindowStart";
+    private const string TRAINING_WINDOW_END = "TrainingWindowEnd";
+    private const string STEP_SIZE = "SlidingStepSize";
+
+    public override string Description {
+      get { return @"Modifies variables TrainingSamplesStart and TrainingSamplesEnd to have a continually sliding window over the whole training data set."; }
+    }
+
+    public TrainingWindowSlider() {
+      AddVariableInfo(new VariableInfo(TRAINING_SAMPLES_START, "Start of whole training set", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(TRAINING_SAMPLES_END, "End of whole training set", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(TRAINING_WINDOW_START, "Start of training set window", typeof(IntData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo(TRAINING_WINDOW_END, "End of training set window", typeof(IntData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo(STEP_SIZE, "Number of samples to slide the window forward", typeof(IntData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      int trainingSamplesStart = GetVariableValue<IntData>(TRAINING_SAMPLES_START, scope, true).Data;
+      int trainingSamplesEnd = GetVariableValue<IntData>(TRAINING_SAMPLES_END, scope, true).Data;
+      IntData trainingWindowStart = GetVariableValue<IntData>(TRAINING_WINDOW_START, scope, true);
+      IntData trainingWindowEnd = GetVariableValue<IntData>(TRAINING_WINDOW_END, scope, true);
+      int stepSize = GetVariableValue<IntData>(STEP_SIZE, scope, true).Data;
+
+      if (trainingWindowEnd.Data + stepSize <= trainingSamplesEnd) {
+        trainingWindowStart.Data = trainingWindowStart.Data + stepSize;
+        trainingWindowEnd.Data = trainingWindowEnd.Data + stepSize;
+      }
+
+      return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP/3.3/TreeGardener.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/TreeGardener.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/TreeGardener.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.GP/3.3/UnknownFunctionException.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/3.3/UnknownFunctionException.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.GP/3.3/UnknownFunctionException.cs	(revision 1529)
@@ -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: unk/sources/HeuristicLab.GP/BakedFunctionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/BakedFunctionTree.cs	(revision 1528)
+++ 	(revision )
@@ -1,347 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP/DefaultFunctionTreeNameGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/DefaultFunctionTreeNameGenerator.cs	(revision 1528)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/EqualiserController.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/EqualiserController.cs	(revision 1528)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/FunctionBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/FunctionBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,157 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/FunctionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/FunctionView.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,198 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.GP/FunctionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/FunctionView.cs	(revision 1528)
+++ 	(revision )
@@ -1,188 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP/FunctionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP/FunctionView.resx	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP/GPOperatorGroup.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/GPOperatorGroup.cs	(revision 1528)
+++ 	(revision )
@@ -1,228 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP/GPOperatorLibrary.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/GPOperatorLibrary.cs	(revision 1528)
+++ 	(revision )
@@ -1,86 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP/GPOperatorLibraryEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/GPOperatorLibraryEditor.Designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,238 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.GP/GPOperatorLibraryEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/GPOperatorLibraryEditor.cs	(revision 1528)
+++ 	(revision )
@@ -1,153 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.GP/GPOperatorLibraryEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.GP/GPOperatorLibraryEditor.resx	(revision 1528)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?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: unk/sources/HeuristicLab.GP/HeuristicLab.GP.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP/HeuristicLab.GP.csproj	(revision 1528)
+++ 	(revision )
@@ -1,193 +1,0 @@
-﻿<?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.3</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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="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="TrainingWindowSlider.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.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.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: unk/sources/HeuristicLab.GP/HeuristicLabGPPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/HeuristicLabGPPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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.3")]
-  [PluginFile(Filename = "HeuristicLab.GP-3.3.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.Evolutionary-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: unk/sources/HeuristicLab.GP/IFunction.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/IFunction.cs	(revision 1528)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/IFunctionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/IFunctionTree.cs	(revision 1528)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/IFunctionTreeExporter.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/IFunctionTreeExporter.cs	(revision 1528)
+++ 	(revision )
@@ -1,33 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/IFunctionTreeNameGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/IFunctionTreeNameGenerator.cs	(revision 1528)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/OffspringEqualiser.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/OffspringEqualiser.cs	(revision 1528)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/ProbabilisticTreeCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/ProbabilisticTreeCreator.cs	(revision 1528)
+++ 	(revision )
@@ -1,83 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.GP/RampedTreeCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/RampedTreeCreator.cs	(revision 1528)
+++ 	(revision )
@@ -1,77 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.GP/TrainingWindowSlider.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/TrainingWindowSlider.cs	(revision 1528)
+++ 	(revision )
@@ -1,65 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 TrainingWindowSlider : OperatorBase {
-
-    private const string TRAINING_SAMPLES_START = "TrainingSamplesStart";
-    private const string TRAINING_SAMPLES_END = "TrainingSamplesEnd";
-    private const string TRAINING_WINDOW_START = "TrainingWindowStart";
-    private const string TRAINING_WINDOW_END = "TrainingWindowEnd";
-    private const string STEP_SIZE = "SlidingStepSize";
-
-    public override string Description {
-      get { return @"Modifies variables TrainingSamplesStart and TrainingSamplesEnd to have a continually sliding window over the whole training data set."; }
-    }
-
-    public TrainingWindowSlider() {
-      AddVariableInfo(new VariableInfo(TRAINING_SAMPLES_START, "Start of whole training set", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo(TRAINING_SAMPLES_END, "End of whole training set", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo(TRAINING_WINDOW_START, "Start of training set window", typeof(IntData), VariableKind.In | VariableKind.Out));
-      AddVariableInfo(new VariableInfo(TRAINING_WINDOW_END, "End of training set window", typeof(IntData), VariableKind.In | VariableKind.Out));
-      AddVariableInfo(new VariableInfo(STEP_SIZE, "Number of samples to slide the window forward", typeof(IntData), VariableKind.In));
-    }
-
-    public override IOperation Apply(IScope scope) {
-      int trainingSamplesStart = GetVariableValue<IntData>(TRAINING_SAMPLES_START, scope, true).Data;
-      int trainingSamplesEnd = GetVariableValue<IntData>(TRAINING_SAMPLES_END, scope, true).Data;
-      IntData trainingWindowStart = GetVariableValue<IntData>(TRAINING_WINDOW_START, scope, true);
-      IntData trainingWindowEnd = GetVariableValue<IntData>(TRAINING_WINDOW_END, scope, true);
-      int stepSize = GetVariableValue<IntData>(STEP_SIZE, scope, true).Data;
-
-      if (trainingWindowEnd.Data + stepSize <= trainingSamplesEnd) {
-        trainingWindowStart.Data = trainingWindowStart.Data + stepSize;
-        trainingWindowEnd.Data = trainingWindowEnd.Data + stepSize;
-      }
-
-      return null;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.GP/TreeGardener.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/TreeGardener.cs	(revision 1528)
+++ 	(revision )
@@ -1,498 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: unk/sources/HeuristicLab.GP/UnknownFunctionException.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP/UnknownFunctionException.cs	(revision 1528)
+++ 	(revision )
@@ -1,33 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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: /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ClientForm.resx	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/Database.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/Database.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/Database.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/EngineRunner.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/EngineRunner.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/EngineRunner.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/EngineStore.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/EngineStore.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/EngineStore.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/GridClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/GridClient.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/GridClient.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/GridClientApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/GridClientApplication.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/GridClientApplication.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/GridServer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/GridServer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/GridServer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/GridServerApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/GridServerApplication.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/GridServerApplication.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/HeuristicLab.Grid.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/HeuristicLab.Grid.csproj	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/HeuristicLab.Grid.csproj	(revision 1529)
@@ -0,0 +1,161 @@
+﻿<?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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Grid-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.SQLite\System.Data.SQLite.DLL</HintPath>
+    </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: /trunk/sources/HeuristicLab.Grid/3.2/HeuristicLabGridPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/HeuristicLabGridPlugin.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/HeuristicLabGridPlugin.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/IEngineStore.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/IEngineStore.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/IEngineStore.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/IGridServer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/IGridServer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/IGridServer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/JobEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/JobEntry.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/JobEntry.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/JobManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/JobManager.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/JobManager.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/ProcessingEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ProcessingEngine.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ProcessingEngine.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.cs	(revision 1529)
@@ -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.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 = 100;
+      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: /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.designer.cs	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.designer.cs	(revision 1529)
@@ -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: /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.resx	(revision 1529)
+++ /trunk/sources/HeuristicLab.Grid/3.2/ServerForm.resx	(revision 1529)
@@ -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: unk/sources/HeuristicLab.Grid/ClientForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ClientForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,79 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/ClientForm.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ClientForm.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,158 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Grid/ClientForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ClientForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-<?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: unk/sources/HeuristicLab.Grid/Database.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/Database.cs	(revision 1528)
+++ 	(revision )
@@ -1,317 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/EngineRunner.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/EngineRunner.cs	(revision 1528)
+++ 	(revision )
@@ -1,64 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/EngineStore.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/EngineStore.cs	(revision 1528)
+++ 	(revision )
@@ -1,122 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Grid/GridClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/GridClient.cs	(revision 1528)
+++ 	(revision )
@@ -1,196 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/GridClientApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/GridClientApplication.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Grid/GridServer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/GridServer.cs	(revision 1528)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Grid/GridServerApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/GridServerApplication.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Grid/HeuristicLab.Grid.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Grid/HeuristicLab.Grid.csproj	(revision 1528)
+++ 	(revision )
@@ -1,161 +1,0 @@
-﻿<?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>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Grid-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\HeuristicLab.SQLite\System.Data.SQLite.DLL</HintPath>
-    </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: unk/sources/HeuristicLab.Grid/HeuristicLabGridPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/HeuristicLabGridPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,34 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Grid/IEngineStore.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/IEngineStore.cs	(revision 1528)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General 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: unk/sources/HeuristicLab.Grid/IGridServer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/IGridServer.cs	(revision 1528)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/JobEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/JobEntry.cs	(revision 1528)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/JobManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/JobManager.cs	(revision 1528)
+++ 	(revision )
@@ -1,289 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/ProcessingEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ProcessingEngine.cs	(revision 1528)
+++ 	(revision )
@@ -1,137 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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: unk/sources/HeuristicLab.Grid/ServerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ServerForm.cs	(revision 1528)
+++ 	(revision )
@@ -1,92 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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 = 100;
-      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: unk/sources/HeuristicLab.Grid/ServerForm.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ServerForm.designer.cs	(revision 1528)
+++ 	(revision )
@@ -1,194 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should 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: unk/sources/HeuristicLab.Grid/ServerForm.resx
===================================================================
--- /trunk/sources/HeuristicLab.Grid/ServerForm.resx	(revision 1528)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?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>
