Index: /trunk/sources/HeuristicLab.CEDMA.Console/Agent.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/Agent.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/Agent.cs	(revision 357)
@@ -0,0 +1,25 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+
+namespace HeuristicLab.CEDMA.Console {
+  public class Agent : ItemBase, IAgent {
+    private string name;
+    private OperatorGraph operatorGraph;
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    public IOperatorGraph OperatorGraph {
+      get { return operatorGraph; }
+    }
+
+    public Agent() : base() {
+      operatorGraph = new OperatorGraph();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/AgentList.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentList.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentList.cs	(revision 357)
@@ -0,0 +1,53 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Console {
+  public class AgentList: ItemBase, IAgentList {
+    private string serverUri;
+    private List<IAgent> agentList;
+    private IDatabase database;
+    public IDatabase Database {
+      get { return database; }
+      set {
+        database = value;
+        ReloadList();
+      }
+    }
+
+    private void ReloadList() {
+      agentList.Clear();
+      foreach(HeuristicLab.CEDMA.DB.Interfaces.IAgent a in database.GetAgents()) {
+        Agent newAgent = new Agent();
+        newAgent.Name = a.Name;
+        agentList.Add(newAgent);
+      }
+      FireChanged();
+    }
+
+    public AgentList()
+      : base() {
+      agentList = new List<IAgent>();
+    }
+    
+    public void Add(IAgent agent) {
+      agentList.Add(agent);
+    }
+
+    public IEnumerator<IAgent> GetEnumerator() {
+      return agentList.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    public override IView CreateView() {
+      return new AgentListView(this);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.Designer.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.Designer.cs	(revision 357)
@@ -0,0 +1,155 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Console {
+  partial class AgentListView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.agentsGroupBox = new System.Windows.Forms.GroupBox();
+      this.agentsListView = 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.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.agentsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.agentsGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(276, 155);
+      this.splitContainer1.SplitterDistance = 135;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // agentsGroupBox
+      // 
+      this.agentsGroupBox.Controls.Add(this.agentsListView);
+      this.agentsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.agentsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.agentsGroupBox.Name = "agentsGroupBox";
+      this.agentsGroupBox.Size = new System.Drawing.Size(135, 155);
+      this.agentsGroupBox.TabIndex = 0;
+      this.agentsGroupBox.TabStop = false;
+      this.agentsGroupBox.Text = "&Agents";
+      // 
+      // agentsListView
+      // 
+      this.agentsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.agentsListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.agentsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.agentsListView.HideSelection = false;
+      this.agentsListView.Location = new System.Drawing.Point(3, 16);
+      this.agentsListView.Name = "agentsListView";
+      this.agentsListView.Size = new System.Drawing.Size(129, 136);
+      this.agentsListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.agentsListView.TabIndex = 0;
+      this.agentsListView.UseCompatibleStateImageBehavior = false;
+      this.agentsListView.View = System.Windows.Forms.View.Details;
+      this.agentsListView.SelectedIndexChanged += new System.EventHandler(this.variablesListView_SelectedIndexChanged);
+      this.agentsListView.SizeChanged += new System.EventHandler(this.variablesListView_SizeChanged);
+      // 
+      // 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);
+      // 
+      // AgentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.addButton);
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "AgentView";
+      this.Size = new System.Drawing.Size(276, 184);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.agentsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox agentsGroupBox;
+    private System.Windows.Forms.ListView agentsListView;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.Button addButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.cs	(revision 357)
@@ -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.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Console {
+  public partial class AgentListView : ViewBase {
+    private ChooseItemDialog chooseItemDialog;
+
+    public IAgentList AgentList {
+      get { return (IAgentList)Item; }
+      set { base.Item = value; }
+    }
+
+    public AgentListView() {
+      InitializeComponent();
+      Caption = "Agent View";
+    }
+    public AgentListView(IAgentList agentList)
+      : this() {
+      AgentList = agentList;
+      agentList.Changed += new EventHandler(agentList_Changed);
+    }
+
+    void agentList_Changed(object sender, EventArgs e) {
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      if(AgentList == null) {
+        Caption = "Agents View";
+        agentsListView.Enabled = false;
+      } else {
+        agentsListView.Enabled = true;
+        agentsListView.Items.Clear();
+        foreach(IAgent agent in AgentList) {
+          ListViewItem item = new ListViewItem();
+          item.Text = agent.Name;
+          item.Tag = agent;
+          agentsListView.Items.Add(item);
+        }
+      }
+    }
+
+    private void variablesListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(detailsGroupBox.Controls.Count > 0)
+        detailsGroupBox.Controls[0].Dispose();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      if(agentsListView.SelectedItems.Count == 1) {
+        IAgent agent = (IAgent)agentsListView.SelectedItems[0].Tag;
+        Control control = (Control)new AgentView(agent);
+        detailsGroupBox.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+
+    #region Size Changed Events
+    private void variablesListView_SizeChanged(object sender, EventArgs e) {
+      if(agentsListView.Columns.Count > 0)
+        agentsListView.Columns[0].Width = Math.Max(0, agentsListView.Width - 25);
+    }
+    #endregion
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      Agent agent = new Agent();
+      string name = DateTime.Now.ToString();
+      agent.Name = name;
+      AgentList.Add(agent);
+    }
+    #endregion
+  }
+}
+
Index: /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.resx	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentListView.resx	(revision 357)
@@ -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.Console/AgentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.Designer.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.Designer.cs	(revision 357)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Console {
+  partial class AgentView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.editorGroupBox = new System.Windows.Forms.GroupBox();
+      this.saveButton = new System.Windows.Forms.Button();
+      this.activateButton = new System.Windows.Forms.Button();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // editorGroupBox
+      // 
+      this.editorGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.editorGroupBox.Location = new System.Drawing.Point(0, 3);
+      this.editorGroupBox.Name = "editorGroupBox";
+      this.editorGroupBox.Size = new System.Drawing.Size(274, 119);
+      this.editorGroupBox.TabIndex = 0;
+      this.editorGroupBox.TabStop = false;
+      this.editorGroupBox.Text = "&Editor:";
+      // 
+      // saveButton
+      // 
+      this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.saveButton.Location = new System.Drawing.Point(4, 128);
+      this.saveButton.Name = "saveButton";
+      this.saveButton.Size = new System.Drawing.Size(75, 23);
+      this.saveButton.TabIndex = 1;
+      this.saveButton.Text = "&Save";
+      this.saveButton.UseVisualStyleBackColor = true;
+      // 
+      // activateButton
+      // 
+      this.activateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.activateButton.Location = new System.Drawing.Point(85, 128);
+      this.activateButton.Name = "activateButton";
+      this.activateButton.Size = new System.Drawing.Size(75, 23);
+      this.activateButton.TabIndex = 2;
+      this.activateButton.Text = "&Activate";
+      this.activateButton.UseVisualStyleBackColor = true;
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Location = new System.Drawing.Point(166, 128);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(75, 23);
+      this.stopButton.TabIndex = 3;
+      this.stopButton.Text = "S&top";
+      this.stopButton.UseVisualStyleBackColor = true;
+      // 
+      // AgentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.activateButton);
+      this.Controls.Add(this.saveButton);
+      this.Controls.Add(this.editorGroupBox);
+      this.Name = "AgentView";
+      this.Size = new System.Drawing.Size(274, 154);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox editorGroupBox;
+    private System.Windows.Forms.Button saveButton;
+    private System.Windows.Forms.Button activateButton;
+    private System.Windows.Forms.Button stopButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.cs	(revision 357)
@@ -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.CEDMA.Console {
+  public partial class AgentView : ViewBase {
+    public IAgent Agent {
+      get { return (IAgent)Item; }
+      set { base.Item = value; }
+    }
+
+    public AgentView() {
+      InitializeComponent();
+      Caption = "Agent";
+    }
+    public AgentView(IAgent agent)
+      : this() {
+      Agent = agent;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      editorGroupBox.Controls.Clear();
+      editorGroupBox.Enabled = false;
+      if(Agent != null && Agent.OperatorGraph != null) {
+        Control editor = (Control)Agent.OperatorGraph.CreateView();
+        if(editor != null) {
+          editorGroupBox.Controls.Add(editor);
+          editor.Dock = DockStyle.Fill;
+          editorGroupBox.Enabled = true;
+        }
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.resx	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/AgentView.resx	(revision 357)
@@ -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.Console/Console.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/Console.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/Console.cs	(revision 357)
@@ -0,0 +1,70 @@
+﻿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.Console {
+  public class Console : ItemBase, IEditable {
+    private AgentList agentList;
+    private ChannelFactory<IDatabase> factory;
+    private IDatabase database;
+    private string serverUri;
+    public string ServerUri {
+      get { return serverUri; }
+      set {
+        serverUri = value;
+        ResetConnection();
+      }
+    }
+
+    public IAgentList AgentList {
+      get { return agentList; }
+    }
+
+    public Console()
+      : base() {
+      agentList = new AgentList();
+    }
+
+    public IEditor CreateEditor() {
+      return new ConsoleEditor(this);
+    }
+
+    public IView CreateView() {
+      return new ConsoleEditor(this);
+    }
+
+    #region serialization
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute uriAttribute = document.CreateAttribute("ServerURI");
+      uriAttribute.Value = serverUri;
+      node.Attributes.Append(uriAttribute);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      ServerUri = node.Attributes["ServerURI"].Value;
+    }
+    #endregion
+
+    #region WCF
+    private void ResetConnection() {
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      factory = new ChannelFactory<IDatabase>(binding);
+      database = factory.CreateChannel(new EndpointAddress(serverUri));
+      agentList.Database = database;
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/ConsoleEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/ConsoleEditor.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/ConsoleEditor.cs	(revision 357)
@@ -0,0 +1,114 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Console {
+  class ConsoleEditor : EditorBase {
+    private System.Windows.Forms.TextBox uriTextBox;
+    private System.Windows.Forms.Label uriLabel;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage overviewPage;
+    private System.Windows.Forms.TabPage agentsPage;
+    private System.Windows.Forms.TabPage resultsPage;
+    private Console console;
+
+    public ConsoleEditor(Console console) {
+      this.console = console;
+      agentsPage.Controls.Add((Control)console.AgentList.CreateView());
+    }
+
+    private void InitializeComponent() {
+      this.uriTextBox = new System.Windows.Forms.TextBox();
+      this.uriLabel = new System.Windows.Forms.Label();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.overviewPage = new System.Windows.Forms.TabPage();
+      this.agentsPage = new System.Windows.Forms.TabPage();
+      this.resultsPage = new System.Windows.Forms.TabPage();
+      this.tabControl.SuspendLayout();
+      this.agentsPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // uriTextBox
+      // 
+      this.uriTextBox.Location = new System.Drawing.Point(91, 3);
+      this.uriTextBox.Name = "uriTextBox";
+      this.uriTextBox.Size = new System.Drawing.Size(205, 20);
+      this.uriTextBox.TabIndex = 0;
+      this.uriTextBox.Validated += new System.EventHandler(this.uriTextBox_Validated);
+      // 
+      // uriLabel
+      // 
+      this.uriLabel.AutoSize = true;
+      this.uriLabel.Location = new System.Drawing.Point(3, 6);
+      this.uriLabel.Name = "uriLabel";
+      this.uriLabel.Size = new System.Drawing.Size(82, 13);
+      this.uriLabel.TabIndex = 1;
+      this.uriLabel.Text = "CEDMA Server:";
+      // 
+      // 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.overviewPage);
+      this.tabControl.Controls.Add(this.agentsPage);
+      this.tabControl.Controls.Add(this.resultsPage);
+      this.tabControl.Location = new System.Drawing.Point(6, 29);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(310, 242);
+      this.tabControl.TabIndex = 2;
+      // 
+      // overviewPage
+      // 
+      this.overviewPage.Location = new System.Drawing.Point(4, 22);
+      this.overviewPage.Name = "overviewPage";
+      this.overviewPage.Padding = new System.Windows.Forms.Padding(3);
+      this.overviewPage.Size = new System.Drawing.Size(288, 194);
+      this.overviewPage.TabIndex = 0;
+      this.overviewPage.Text = "Overview";
+      this.overviewPage.UseVisualStyleBackColor = true;
+      // 
+      // agentsPage
+      // 
+      this.agentsPage.Location = new System.Drawing.Point(4, 22);
+      this.agentsPage.Name = "agentsPage";
+      this.agentsPage.Padding = new System.Windows.Forms.Padding(3);
+      this.agentsPage.Size = new System.Drawing.Size(302, 216);
+      this.agentsPage.TabIndex = 1;
+      this.agentsPage.Text = "Agents";
+      this.agentsPage.UseVisualStyleBackColor = true;
+      // 
+      // resultsPage
+      // 
+      this.resultsPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsPage.Name = "resultsPage";
+      this.resultsPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsPage.Size = new System.Drawing.Size(288, 194);
+      this.resultsPage.TabIndex = 2;
+      this.resultsPage.Text = "Results";
+      this.resultsPage.UseVisualStyleBackColor = true;
+      // 
+      // ConsoleEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.uriLabel);
+      this.Controls.Add(this.uriTextBox);
+      this.Name = "ConsoleEditor";
+      this.Size = new System.Drawing.Size(319, 274);
+      this.tabControl.ResumeLayout(false);
+      this.agentsPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    private void uriTextBox_Validated(object sender, EventArgs e) {
+      console.ServerUri = uriTextBox.Text;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/ConsoleEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/ConsoleEditor.resx	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/ConsoleEditor.resx	(revision 357)
@@ -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.Console/HeuristicLab.CEDMA.Console.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/HeuristicLab.CEDMA.Console.csproj	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/HeuristicLab.CEDMA.Console.csproj	(revision 357)
@@ -42,4 +42,12 @@
       <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>
@@ -52,9 +60,53 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Agent.cs" />
+    <Compile Include="AgentList.cs" />
+    <Compile Include="Console.cs" />
+    <Compile Include="ConsoleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="HeuristicLabCedmaConsolePlugin.cs" />
+    <Compile Include="IAgent.cs" />
+    <Compile Include="IAgentList.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="AgentListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AgentListView.Designer.cs">
+      <DependentUpon>AgentListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AgentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AgentView.Designer.cs">
+      <DependentUpon>AgentView.cs</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.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>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AgentListView.resx">
+      <DependentUpon>AgentListView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AgentView.resx">
+      <DependentUpon>AgentView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConsoleEditor.resx">
+      <DependentUpon>ConsoleEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /trunk/sources/HeuristicLab.CEDMA.Console/HeuristicLabCedmaConsolePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/HeuristicLabCedmaConsolePlugin.cs	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/HeuristicLabCedmaConsolePlugin.cs	(revision 357)
@@ -28,4 +28,5 @@
   [ClassInfo(Name = "HeuristicLab.CEDMA.Console")]
   [PluginFile(Filename = "HeuristicLab.CEDMA.Console.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core")]
   [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces")]
   [Dependency(Dependency = "HeuristicLab.CEDMA.Server")]
Index: /trunk/sources/HeuristicLab.CEDMA.Console/IAgent.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/IAgent.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/IAgent.cs	(revision 357)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Console {
+  public interface IAgent : IItem {
+    string Name { get; }
+    IOperatorGraph OperatorGraph { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.Console/IAgentList.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Console/IAgentList.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.Console/IAgentList.cs	(revision 357)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Console {
+  public interface IAgentList : IItem, IEnumerable<IAgent> {
+    void Add(IAgent agent);
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/AgentStatus.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/AgentStatus.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/AgentStatus.cs	(revision 357)
@@ -0,0 +1,8 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  public enum AgentStatus { Aktive, Finished, Error, Waiting }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 357)
@@ -42,4 +42,7 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Xml.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
@@ -52,5 +55,8 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AgentStatus.cs" />
     <Compile Include="HeuristicLabCedmaDbInterfacesPlugin.cs" />
+    <Compile Include="IAgent.cs" />
+    <Compile Include="IDatabase.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IAgent.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IAgent.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IAgent.cs	(revision 357)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  public interface IAgent {
+    string Name { get; }
+    AgentStatus Status { get; }
+    byte[] RawData { get; }
+    void Save();
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs	(revision 357)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [ServiceContract(Namespace = "http://HeuristicLab.Cedma")]
+  public interface IDatabase {
+    [OperationContract]
+    IList<IAgent> GetAgents();
+
+    [OperationContract]
+    IAgent CreateAgent();
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB/Agent.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/Agent.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/Agent.cs	(revision 357)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq.Mapping;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.DB {
+  [Table(Name = "AgentTable")]
+  class Agent : IAgent {
+    [Column(IsPrimaryKey = true)]
+    public int ID;
+    [Column]
+    public string Name;
+    [Column]
+    public AgentStatus Status;
+    [Column]
+    public byte[] RawData;
+
+    string IAgent.Name {
+      get { return this.Name; }
+    }
+
+    AgentStatus IAgent.Status {
+      get { return this.Status; }
+    }
+
+    byte[] IAgent.RawData {
+      get { return this.RawData; }
+    }
+
+    public void Save() {
+      throw new NotImplementedException();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB/Database.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/Database.cs	(revision 357)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/Database.cs	(revision 357)
@@ -0,0 +1,37 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+
+namespace HeuristicLab.CEDMA.DB {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
+  public class Database : DataContext, IDatabase {
+    Table<Agent> Agents;
+
+    public Database() : this("c:\\cedma.mdf") { }
+
+    public Database(string connection) : base(connection) { 
+    }
+
+    public IList<IAgent> GetAgents() {
+      List<IAgent> result = new List<IAgent>();
+      foreach(Agent a in Agents) {
+        result.Add(a);
+      }
+      return result;
+    }
+
+    public IAgent CreateAgent() {
+      Agent newAgent = new Agent();
+      newAgent.Name = DateTime.Now.ToString();
+      newAgent.Status = AgentStatus.Waiting;
+      newAgent.RawData = null;
+      Agents.InsertOnSubmit(newAgent);
+      this.SubmitChanges();
+      return newAgent;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 357)
@@ -42,4 +42,14 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.SQLite, Version=1.0.49.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.SQLite\System.Data.SQLite.DLL</HintPath>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Xml.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
@@ -52,4 +62,6 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Agent.cs" />
+    <Compile Include="Database.cs" />
     <Compile Include="HeuristicLabCedmaDbPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -57,4 +69,14 @@
   <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.SQLite\HeuristicLab.SQLite.csproj">
+      <Project>{6960CBCD-E44B-49B0-BA86-671091C42C36}</Project>
+      <Name>HeuristicLab.SQLite</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 357)
@@ -28,4 +28,5 @@
   [ClassInfo(Name = "HeuristicLab.CEDMA.DB")]
   [PluginFile(Filename = "HeuristicLab.CEDMA.DB.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.SQLite")]
   [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces")]
   public class HeuristicLabCedmaDbPlugin : PluginBase {
Index: unk/sources/HeuristicLab.CEDMA.Server/AgentWorld.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/AgentWorld.cs	(revision 356)
+++ 	(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.Linq;
-using System.Text;
-
-namespace HeuristicLab.CEDMA.Server {
-  class AgentWorld {
-    public int ActiveAgents {
-      get { return 0; }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 357)
@@ -38,4 +38,7 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Drawing" />
     <Reference Include="System.Runtime.Serialization">
@@ -56,6 +59,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="AgentWorld.cs" />
-    <Compile Include="IAgentWorld.cs" />
     <Compile Include="ServerApplication.cs" />
     <Compile Include="HeuristicLabCedmaServerPlugin.cs" />
@@ -69,4 +70,12 @@
   </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.CEDMA.DB\HeuristicLab.CEDMA.DB.csproj">
+      <Project>{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}</Project>
+      <Name>HeuristicLab.CEDMA.DB</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
Index: unk/sources/HeuristicLab.CEDMA.Server/IAgentWorld.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/IAgentWorld.cs	(revision 356)
+++ 	(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.Linq;
-using System.Text;
-
-namespace HeuristicLab.CEDMA.Server {
-  interface IAgentWorld {
-  }
-}
Index: /trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 356)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 357)
@@ -32,9 +32,11 @@
 using HeuristicLab.PluginInfrastructure;
 using System.Net;
+using HeuristicLab.CEDMA.DB;
+using HeuristicLab.CEDMA.DB.Interfaces;
 
 namespace HeuristicLab.CEDMA.Server {
   public partial class ServerForm : Form {
     private ServiceHost host;
-    private AgentWorld agentWorld = new AgentWorld();
+    private Database database = new Database();
 
     public ServerForm() {
@@ -51,5 +53,5 @@
 
     private void Start() {
-      host = new ServiceHost(agentWorld, new Uri(addressTextBox.Text));
+      host = new ServiceHost(database, new Uri(addressTextBox.Text));
       ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
       throttlingBehavior.MaxConcurrentSessions = 20;
@@ -62,5 +64,5 @@
         binding.Security.Mode = SecurityMode.None;
 
-        host.AddServiceEndpoint(typeof(IAgentWorld), binding, addressTextBox.Text);
+        host.AddServiceEndpoint(typeof(IDatabase), binding, addressTextBox.Text);
         host.Open();
       } catch (CommunicationException ex) {
@@ -71,5 +73,4 @@
 
     private void statusUpdateTimer_Tick(object sender, EventArgs e) {
-      activeAgentsTextBox.Text = agentWorld.ActiveAgents.ToString();
     }
   }
Index: /trunk/sources/HeuristicLab.Logging/HeuristicLab.Logging.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Logging/HeuristicLab.Logging.csproj	(revision 356)
+++ /trunk/sources/HeuristicLab.Logging/HeuristicLab.Logging.csproj	(revision 357)
@@ -46,4 +46,5 @@
   <ItemGroup>
     <Compile Include="BestAverageWorstQualityCalculator.cs" />
+    <Compile Include="StatisticsLogger.cs" />
     <Compile Include="Logger.cs" />
     <Compile Include="Linechart.cs" />
Index: /trunk/sources/HeuristicLab.StructureIdentification/HeuristicLab.StructureIdentification.csproj
===================================================================
--- /trunk/sources/HeuristicLab.StructureIdentification/HeuristicLab.StructureIdentification.csproj	(revision 356)
+++ /trunk/sources/HeuristicLab.StructureIdentification/HeuristicLab.StructureIdentification.csproj	(revision 357)
@@ -48,4 +48,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="EqualiserTuner.cs" />
     <Compile Include="ProbabilisticTreeCreator.cs" />
     <Compile Include="Evaluation\CoefficientOfDeterminationEvaluator.cs" />
@@ -72,4 +73,6 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="RampedTreeCreator.cs" />
+    <Compile Include="OffspringEqualiser.cs" />
+    <Compile Include="Recombination\StandardCrossOver.cs" />
     <Compile Include="Recombination\SizeFairCrossOver.cs" />
     <Compile Include="TreeGardener.cs" />
