Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Console.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Console.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Console.cs	(revision 1305)
@@ -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;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Console : ItemBase, IEditable {
+    private DataSetList dataSetList;
+    private ChannelFactory<IStore> factory;
+    private IStore store;
+    private string serverUri;
+    public string ServerUri {
+      get { return serverUri; }
+    }
+
+    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
+
+    #region WCF
+    private void ResetConnection() {
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.ReceiveTimeout = new TimeSpan(1, 0, 0);
+      binding.MaxReceivedMessageSize = 1000000000; // 100Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 1000000000; // also 100M chars
+      binding.ReaderQuotas.MaxArrayLength = 1000000000; // also 100M elements;
+      factory = new ChannelFactory<IStore>(binding);
+      store = factory.CreateChannel(new EndpointAddress(serverUri));
+      dataSetList.Store = store;
+    }
+    #endregion
+
+    internal void Connect(string serverUri) {
+      this.serverUri = serverUri;
+      ResetConnection();
+    }
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ConsoleEditor.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ConsoleEditor.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ConsoleEditor.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ConsoleEditor.resx
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ConsoleEditor.resx	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ConsoleEditor.resx	(revision 1305)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSet.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSet.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSet.cs	(revision 1305)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.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 serializedDataVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("SerializedData");
+          //var persistedData = Store.Query(
+          //  new Statement[] { new Statement(new Entity(Ontology.CedmaNameSpace + Guid), Ontology.PredicateSerializedData, serializedDataVar)});
+          var persistedData = Store.Query(
+            "<" + Ontology.CedmaNameSpace + Guid + "> <" + Ontology.PredicateSerializedData.Uri + "> ?SerializedData .");
+          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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetList.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetList.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetList.cs	(revision 1305)
@@ -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
+
+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 .");
+      //  new Statement[] { 
+      //    new Statement(dataSetVar, Ontology.PredicateInstanceOf, Ontology.TypeDataSet),
+      //    new Statement(dataSetVar, Ontology.PredicateName, dataSetNameVar)
+      //});
+      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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.Designer.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.Designer.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.Designer.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.resx
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.resx	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetListView.resx	(revision 1305)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.Designer.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.Designer.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.Designer.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.resx
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.resx	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/DataSetView.resx	(revision 1305)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/HeuristicLab.CEDMA.Core.csproj	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/HeuristicLab.CEDMA.Core.csproj	(revision 1305)
@@ -0,0 +1,175 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C27DDF6C-84DF-45EF-B82F-57A28DD51166}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.Core-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="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="ProblemInjector.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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/HeuristicLabCedmaCorePlugin.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/HeuristicLabCedmaCorePlugin.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/HeuristicLabCedmaCorePlugin.cs	(revision 1305)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Core-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Core-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.Charting-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabCedmaCorePlugin : PluginBase {
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/IResultsViewFactory.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/IResultsViewFactory.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/IResultsViewFactory.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Problem.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Problem.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Problem.cs	(revision 1305)
@@ -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 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 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();
+
+      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);
+
+      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);
+      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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemInjector.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemInjector.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemInjector.cs	(revision 1305)
@@ -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.Operators;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class ProblemInjector : OperatorBase {
+    public override string Description {
+      get { return @"Injects the necessary variables for a CEDMA problem."; }
+    }
+
+    private IntData targetVariable = new IntData();
+    public int TargetVariable {
+      get { return targetVariable.Data; }
+      set { targetVariable.Data = value; }
+    }
+
+    public ProblemInjector() : base() { } // for persistence
+
+    public ProblemInjector(Problem problem)
+      : base() {
+      AddVariableInfo(new VariableInfo("Dataset", "Dataset", typeof(Dataset), VariableKind.New));
+      GetVariableInfo("Dataset").Local = true;
+      AddVariable(new Variable("Dataset", problem.DataSet));
+
+      AddVariableInfo(new VariableInfo("TargetVariable", "TargetVariable", typeof(IntData), VariableKind.New));
+      GetVariableInfo("TargetVariable").Local = true;
+      AddVariable(new Variable("TargetVariable", targetVariable));
+
+      AddVariableInfo(new VariableInfo("AllowedFeatures", "Indexes of allowed input variables", typeof(ItemList<IntData>), VariableKind.New));
+      GetVariableInfo("AllowedFeatures").Local = true;
+      ItemList<IntData> allowedFeatures = new ItemList<IntData>();
+      foreach(int allowedVariable in problem.AllowedInputVariables) 
+        allowedFeatures.Add(new IntData(allowedVariable));
+      AddVariable(new Variable("AllowedFeatures", allowedFeatures));
+
+      AddVariableInfo(new VariableInfo("TrainingSamplesStart", "TrainingSamplesStart", typeof(IntData), VariableKind.New));
+      GetVariableInfo("TrainingSamplesStart").Local = true;
+      AddVariable(new Variable("TrainingSamplesStart", new IntData(problem.TrainingSamplesStart)));
+
+      AddVariableInfo(new VariableInfo("TrainingSamplesEnd", "TrainingSamplesEnd", typeof(IntData), VariableKind.New));
+      GetVariableInfo("TrainingSamplesEnd").Local = true;
+      AddVariable(new Variable("TrainingSamplesEnd", new IntData(problem.TrainingSamplesEnd)));
+
+      AddVariableInfo(new VariableInfo("ValidationSamplesStart", "ValidationSamplesStart", typeof(IntData), VariableKind.New));
+      GetVariableInfo("ValidationSamplesStart").Local = true;
+      AddVariable(new Variable("ValidationSamplesStart", new IntData(problem.ValidationSamplesStart)));
+
+      AddVariableInfo(new VariableInfo("ValidationSamplesEnd", "ValidationSamplesEnd", typeof(IntData), VariableKind.New));
+      GetVariableInfo("ValidationSamplesEnd").Local = true;
+      AddVariable(new Variable("ValidationSamplesEnd", new IntData(problem.ValidationSamplesEnd)));
+
+      AddVariableInfo(new VariableInfo("TestSamplesStart", "TestSamplesStart", typeof(IntData), VariableKind.New));
+      GetVariableInfo("TestSamplesStart").Local = true;
+      AddVariable(new Variable("TestSamplesStart", new IntData(problem.TestSamplesStart)));
+
+      AddVariableInfo(new VariableInfo("TestSamplesEnd", "TestSamplesEnd", typeof(IntData), VariableKind.New));
+      GetVariableInfo("TestSamplesEnd").Local = true;
+      AddVariable(new Variable("TestSamplesEnd", new IntData(problem.TestSamplesEnd)));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      foreach(VariableInfo info in VariableInfos) {
+        if(info.Local) {
+          IVariable var = GetVariable(info.FormalName);
+          if(var != null) scope.AddVariable(new Variable(info.ActualName, (IItem)var.Value.Clone()));
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.Designer.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.Designer.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.Designer.cs	(revision 1305)
@@ -0,0 +1,326 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
+      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.modelType = new System.Windows.Forms.ComboBox();
+      this.taskLabel = new System.Windows.Forms.Label();
+      this.targetsGroupBox.SuspendLayout();
+      this.inputsGroupBox.SuspendLayout();
+      this.partitioningGroupBox.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, 48);
+      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:";
+      // 
+      // 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(326, 176);
+      this.datasetView.TabIndex = 17;
+      // 
+      // 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)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.autoregressiveCheckBox.AutoSize = true;
+      this.autoregressiveCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.autoregressiveCheckBox.Location = new System.Drawing.Point(215, 424);
+      this.autoregressiveCheckBox.Name = "autoregressiveCheckBox";
+      this.autoregressiveCheckBox.Size = new System.Drawing.Size(102, 17);
+      this.autoregressiveCheckBox.TabIndex = 22;
+      this.autoregressiveCheckBox.Text = "Auto regressive:";
+      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(3, 320);
+      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(176, 320);
+      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(3, 214);
+      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";
+      // 
+      // modelType
+      // 
+      this.modelType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.modelType.FormattingEnabled = true;
+      this.modelType.Location = new System.Drawing.Point(88, 422);
+      this.modelType.Name = "modelType";
+      this.modelType.Size = new System.Drawing.Size(121, 21);
+      this.modelType.TabIndex = 26;
+      this.modelType.SelectedValueChanged += new System.EventHandler(this.modelType_SelectedValueChanged);
+      // 
+      // taskLabel
+      // 
+      this.taskLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.taskLabel.AutoSize = true;
+      this.taskLabel.Location = new System.Drawing.Point(8, 425);
+      this.taskLabel.Name = "taskLabel";
+      this.taskLabel.Size = new System.Drawing.Size(74, 13);
+      this.taskLabel.TabIndex = 27;
+      this.taskLabel.Text = "Learning task:";
+      // 
+      // ProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.taskLabel);
+      this.Controls.Add(this.modelType);
+      this.Controls.Add(this.partitioningGroupBox);
+      this.Controls.Add(this.inputsGroupBox);
+      this.Controls.Add(this.targetsGroupBox);
+      this.Controls.Add(this.autoregressiveCheckBox);
+      this.Controls.Add(this.datasetView);
+      this.Controls.Add(this.importButton);
+      this.Name = "ProblemView";
+      this.Size = new System.Drawing.Size(337, 446);
+      this.targetsGroupBox.ResumeLayout(false);
+      this.inputsGroupBox.ResumeLayout(false);
+      this.partitioningGroupBox.ResumeLayout(false);
+      this.partitioningGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #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.ComboBox modelType;
+    private System.Windows.Forms.Label taskLabel;
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.cs	(revision 1305)
@@ -0,0 +1,227 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the 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();
+      foreach (LearningTask l in Enum.GetValues(typeof(LearningTask))) {
+        modelType.Items.Add(l);
+      }
+      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();
+      autoregressiveCheckBox.Checked = problem.AutoRegressive;
+      for (int i = 0; i < modelType.Items.Count; i++) {
+        if ((LearningTask)modelType.Items[i] == problem.LearningTask) {
+          modelType.SelectedIndex = i;
+          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();
+    }
+
+    private void modelType_SelectedValueChanged(object sender, EventArgs e) {
+      if ((LearningTask)modelType.SelectedItem == LearningTask.TimeSeries) autoregressiveCheckBox.Enabled = true;
+      else autoregressiveCheckBox.Enabled = false;
+      problem.LearningTask = (LearningTask)modelType.SelectedItem;
+    }
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.resx
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.resx	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ProblemView.resx	(revision 1305)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Properties/AssemblyInfo.frame	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Properties/AssemblyInfo.frame	(revision 1305)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5ca5c9d0-1d2f-4845-a919-3d1ba02d6e04")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Results.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Results.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/Results.cs	(revision 1305)
@@ -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.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 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 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() {
+      if (store == null) yield break;
+      entries = new List<ResultsEntry>();
+      var results = store.Query("<" + dataSetEntity + "> <" + Ontology.PredicateHasModel + "> ?Model ." + Environment.NewLine +
+        "?Model ?Attribute ?Value .")
+        .GroupBy(x => (Entity)x.Get("Model"));
+      foreach (var modelBindings in results) {
+        ResultsEntry entry = new ResultsEntry(modelBindings.Key.Uri);
+        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);
+            }
+          }
+        }
+        entries.Add(entry);
+        yield return entry;
+      }
+
+      FireChanged();
+      cached = true;
+    }
+
+    internal IEnumerable<string> SelectModelAttributes() {
+      return CategoricalVariables.Concat(OrdinalVariables);
+    }
+
+    private void LoadModelAttributes() {
+      this.ordinalVariables =
+        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeOrdinalAttribute + "> .")
+        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
+        .ToArray();
+      this.categoricalVariables =
+        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeCategoricalAttribute + "> .")
+        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
+        .ToArray();
+    }
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ResultsEntry.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ResultsEntry.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/ResultsEntry.cs	(revision 1305)
@@ -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 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; } }
+
+    public ResultsEntry(string uri) {
+      this.uri = uri;
+    }
+
+    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) {
+        b.Append(v.Key).Append(" = ").Append(v.Value).AppendLine();
+      }
+      return b.ToString();
+    }
+
+    //internal void OpenModel() {
+    //  resultList.OpenModel(this);
+    //}
+
+    //internal void OpenGeneratingAlgorithm() {
+    //  resultList.OpenAlgorithm(this);
+    //}
+  }
+}
Index: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.Designer.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.Designer.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.Designer.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.cs
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.cs	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.cs	(revision 1305)
@@ -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: /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.resx
===================================================================
--- /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.resx	(revision 1305)
+++ /branches/plugins/HeuristicLab.CEDMA.Core/3.2/TableResultsView.resx	(revision 1305)
@@ -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>
