Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChart.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1106)
@@ -27,4 +27,5 @@
 using HeuristicLab.Charting;
 using System.Windows.Forms;
+using HeuristicLab.CEDMA.Core;
 
 namespace HeuristicLab.CEDMA.Charting {
@@ -50,5 +51,5 @@
     private double maxY = double.NegativeInfinity;
     private List<Record> records;
-    private ResultList results;
+    private Results results;
     private Dictionary<IPrimitive, Record> primitiveToRecordDictionary;
     private Dictionary<Record, IPrimitive> recordToPrimitiveDictionary;
@@ -56,5 +57,5 @@
     private Group points;
 
-    public BubbleChart(ResultList results, PointD lowerLeft, PointD upperRight)
+    public BubbleChart(Results results, PointD lowerLeft, PointD upperRight)
       : base(lowerLeft, upperRight) {
       records = new List<Record>();
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs	(revision 1106)
@@ -0,0 +1,206 @@
+﻿namespace HeuristicLab.CEDMA.Charting {
+  partial class BubbleChartView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.yJitterLabel = new System.Windows.Forms.Label();
+      this.xJitterlabel = new System.Windows.Forms.Label();
+      this.xTrackBar = new System.Windows.Forms.TrackBar();
+      this.xAxisLabel = new System.Windows.Forms.Label();
+      this.xAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.yAxisLabel = new System.Windows.Forms.Label();
+      this.yAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.yTrackBar = new System.Windows.Forms.TrackBar();
+      this.sizeComboBox = new System.Windows.Forms.ComboBox();
+      this.sizeLabel = new System.Windows.Forms.Label();
+      this.invertCheckbox = new System.Windows.Forms.CheckBox();
+      this.bubbleChartControl = new HeuristicLab.CEDMA.Charting.BubbleChartControl();
+      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // yJitterLabel
+      // 
+      this.yJitterLabel.AutoSize = true;
+      this.yJitterLabel.Location = new System.Drawing.Point(3, 30);
+      this.yJitterLabel.Name = "yJitterLabel";
+      this.yJitterLabel.Size = new System.Drawing.Size(29, 13);
+      this.yJitterLabel.TabIndex = 13;
+      this.yJitterLabel.Text = "jitter:";
+      // 
+      // xJitterlabel
+      // 
+      this.xJitterlabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xJitterlabel.AutoSize = true;
+      this.xJitterlabel.Location = new System.Drawing.Point(291, 418);
+      this.xJitterlabel.Name = "xJitterlabel";
+      this.xJitterlabel.Size = new System.Drawing.Size(29, 13);
+      this.xJitterlabel.TabIndex = 12;
+      this.xJitterlabel.Text = "jitter:";
+      // 
+      // xTrackBar
+      // 
+      this.xTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xTrackBar.Location = new System.Drawing.Point(326, 418);
+      this.xTrackBar.Maximum = 100;
+      this.xTrackBar.Name = "xTrackBar";
+      this.xTrackBar.Size = new System.Drawing.Size(121, 45);
+      this.xTrackBar.TabIndex = 11;
+      this.xTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.xTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // xAxisLabel
+      // 
+      this.xAxisLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisLabel.AutoSize = true;
+      this.xAxisLabel.Location = new System.Drawing.Point(305, 394);
+      this.xAxisLabel.Name = "xAxisLabel";
+      this.xAxisLabel.Size = new System.Drawing.Size(15, 13);
+      this.xAxisLabel.TabIndex = 8;
+      this.xAxisLabel.Text = "x:";
+      // 
+      // xAxisComboBox
+      // 
+      this.xAxisComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisComboBox.FormattingEnabled = true;
+      this.xAxisComboBox.Location = new System.Drawing.Point(326, 391);
+      this.xAxisComboBox.Name = "xAxisComboBox";
+      this.xAxisComboBox.Size = new System.Drawing.Size(121, 21);
+      this.xAxisComboBox.TabIndex = 7;
+      this.xAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.axisComboBox_SelectedIndexChanged);
+      // 
+      // yAxisLabel
+      // 
+      this.yAxisLabel.AutoSize = true;
+      this.yAxisLabel.Location = new System.Drawing.Point(3, 6);
+      this.yAxisLabel.Name = "yAxisLabel";
+      this.yAxisLabel.Size = new System.Drawing.Size(15, 13);
+      this.yAxisLabel.TabIndex = 6;
+      this.yAxisLabel.Text = "y:";
+      // 
+      // yAxisComboBox
+      // 
+      this.yAxisComboBox.FormattingEnabled = true;
+      this.yAxisComboBox.Location = new System.Drawing.Point(24, 3);
+      this.yAxisComboBox.Name = "yAxisComboBox";
+      this.yAxisComboBox.Size = new System.Drawing.Size(121, 21);
+      this.yAxisComboBox.TabIndex = 5;
+      this.yAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.axisComboBox_SelectedIndexChanged);
+      // 
+      // yTrackBar
+      // 
+      this.yTrackBar.Location = new System.Drawing.Point(38, 30);
+      this.yTrackBar.Maximum = 100;
+      this.yTrackBar.Name = "yTrackBar";
+      this.yTrackBar.Size = new System.Drawing.Size(107, 45);
+      this.yTrackBar.TabIndex = 10;
+      this.yTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.yTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // sizeComboBox
+      // 
+      this.sizeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeComboBox.FormattingEnabled = true;
+      this.sizeComboBox.Location = new System.Drawing.Point(329, 3);
+      this.sizeComboBox.Name = "sizeComboBox";
+      this.sizeComboBox.Size = new System.Drawing.Size(121, 21);
+      this.sizeComboBox.TabIndex = 14;
+      this.sizeComboBox.SelectedIndexChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
+      // 
+      // sizeLabel
+      // 
+      this.sizeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeLabel.AutoSize = true;
+      this.sizeLabel.Location = new System.Drawing.Point(259, 6);
+      this.sizeLabel.Name = "sizeLabel";
+      this.sizeLabel.Size = new System.Drawing.Size(64, 13);
+      this.sizeLabel.TabIndex = 15;
+      this.sizeLabel.Text = "Bubble size:";
+      // 
+      // invertCheckbox
+      // 
+      this.invertCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.invertCheckbox.AutoSize = true;
+      this.invertCheckbox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.invertCheckbox.Location = new System.Drawing.Point(326, 30);
+      this.invertCheckbox.Name = "invertCheckbox";
+      this.invertCheckbox.Size = new System.Drawing.Size(64, 17);
+      this.invertCheckbox.TabIndex = 16;
+      this.invertCheckbox.Text = "Inverse:";
+      this.invertCheckbox.UseVisualStyleBackColor = true;
+      this.invertCheckbox.CheckedChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
+      // 
+      // bubbleChartControl
+      // 
+      this.bubbleChartControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.bubbleChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.bubbleChartControl.Chart = null;
+      this.bubbleChartControl.Location = new System.Drawing.Point(3, 81);
+      this.bubbleChartControl.Name = "bubbleChartControl";
+      this.bubbleChartControl.ScaleOnResize = true;
+      this.bubbleChartControl.Size = new System.Drawing.Size(444, 304);
+      this.bubbleChartControl.TabIndex = 17;
+      // 
+      // BubbleChartView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.bubbleChartControl);
+      this.Controls.Add(this.invertCheckbox);
+      this.Controls.Add(this.sizeLabel);
+      this.Controls.Add(this.sizeComboBox);
+      this.Controls.Add(this.yJitterLabel);
+      this.Controls.Add(this.xJitterlabel);
+      this.Controls.Add(this.xTrackBar);
+      this.Controls.Add(this.xAxisLabel);
+      this.Controls.Add(this.xAxisComboBox);
+      this.Controls.Add(this.yAxisLabel);
+      this.Controls.Add(this.yAxisComboBox);
+      this.Controls.Add(this.yTrackBar);
+      this.Name = "BubbleChartView";
+      this.Size = new System.Drawing.Size(450, 459);
+      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label xAxisLabel;
+    private System.Windows.Forms.ComboBox xAxisComboBox;
+    private System.Windows.Forms.Label yAxisLabel;
+    private System.Windows.Forms.ComboBox yAxisComboBox;
+    private System.Windows.Forms.TrackBar yTrackBar;
+    private System.Windows.Forms.TrackBar xTrackBar;
+    private System.Windows.Forms.Label xJitterlabel;
+    private System.Windows.Forms.Label yJitterLabel;
+    private System.Windows.Forms.ComboBox sizeComboBox;
+    private System.Windows.Forms.Label sizeLabel;
+    private System.Windows.Forms.CheckBox invertCheckbox;
+    private BubbleChartControl bubbleChartControl;
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.cs	(revision 1106)
@@ -0,0 +1,67 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.Charting;
+using HeuristicLab.CEDMA.Core;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public partial class BubbleChartView : ViewBase {
+    private Results results;
+    private const string CONSTANT_SIZE = "<constant>";
+    private Label pleaseSelectAxisLabel = new Label();
+
+    public BubbleChartView(Results results) {
+      this.results = results;
+      InitializeComponent();
+      bubbleChartControl.Chart = new BubbleChart(results, 0, 0, 100, 100);
+      xAxisComboBox.Items.AddRange(results.OrdinalVariableNames);
+      yAxisComboBox.Items.AddRange(results.OrdinalVariableNames);
+      sizeComboBox.Items.Add(CONSTANT_SIZE);
+      sizeComboBox.Items.AddRange(results.VariableNames);
+      sizeComboBox.SelectedItem = sizeComboBox.Items[0];
+      sizeComboBox.Enabled = false;
+      invertCheckbox.Enabled = false;
+      sizeLabel.Enabled = false;
+      yAxisComboBox.SelectedItem = yAxisComboBox.Items[0];
+      xAxisComboBox.SelectedItem = xAxisComboBox.Items[0];
+    }
+
+    private void axisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      if (xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
+      xJitterlabel.Enabled = true;
+      xTrackBar.Enabled = true;
+      yJitterLabel.Enabled = true;
+      yTrackBar.Enabled = true;
+      sizeComboBox.Enabled = true;
+      invertCheckbox.Enabled = true;
+      sizeLabel.Enabled = true;
+      bubbleChartControl.Chart.ShowXvsY((string)xAxisComboBox.SelectedItem, (string)yAxisComboBox.SelectedItem);
+    }
+
+    private void jitterTrackBar_ValueChanged(object sender, EventArgs e) {
+      if (bubbleChartControl.Chart != null) {
+        double xJitterFactor = xTrackBar.Value / 100.0;
+        double yJitterFactor = yTrackBar.Value / 100.0;
+        bubbleChartControl.Chart.SetJitter(xJitterFactor, yJitterFactor);
+      }
+      UpdateChart();
+    }
+
+    private void sizeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (bubbleChartControl.Chart != null) {
+        bubbleChartControl.Chart.SetBubbleSizeDimension((string)sizeComboBox.SelectedItem, invertCheckbox.Checked);
+        UpdateChart();
+      }
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.resx
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.resx	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/BubbleChartView.resx	(revision 1106)
@@ -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/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1106)
@@ -66,28 +66,12 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="BubbleChart.cs" />
-    <Compile Include="BubbleChartControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="BubbleChartControl.Designer.cs">
-      <DependentUpon>BubbleChartControl.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Histogram.cs" />
-    <Compile Include="HistogramControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="HistogramControl.Designer.cs">
-      <DependentUpon>HistogramControl.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ModelView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ModelView.Designer.cs">
-      <DependentUpon>ModelView.cs</DependentUpon>
-    </Compile>
     <Compile Include="HeuristicLabCedmaChartingPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.Core\HeuristicLab.CEDMA.Core.csproj">
+      <Project>{C27DDF6C-84DF-45EF-B82F-57A28DD51166}</Project>
+      <Name>HeuristicLab.CEDMA.Core</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
       <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
@@ -135,18 +119,4 @@
     <None Include="Properties\AssemblyInfo.frame" />
   </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="BubbleChartControl.resx">
-      <DependentUpon>BubbleChartControl.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="HistogramControl.resx">
-      <DependentUpon>HistogramControl.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ModelView.resx">
-      <DependentUpon>ModelView.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/Console.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/Console.cs	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/Console.cs	(revision 1106)
@@ -29,5 +29,4 @@
 using System.ServiceModel.Description;
 using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.Charting;
 
 namespace HeuristicLab.CEDMA.Core {
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSet.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSet.cs	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSet.cs	(revision 1106)
@@ -88,4 +88,5 @@
       Results results = new Results(Store);
       results.FilterDataSet(new Entity(Ontology.CedmaNameSpace + Guid));
+      return results;
     }
   }
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs	(revision 1106)
@@ -75,4 +75,5 @@
       // 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(84, 128);
       this.resultsButton.Name = "resultsButton";
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSetView.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSetView.cs	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/DataSetView.cs	(revision 1106)
@@ -64,5 +64,5 @@
     private void resultsButton_Click(object sender, EventArgs e) {
       Results results = dataSet.GetResults();
-      IControl resultsControl = (IControl)results.CreateView();
+      IControl resultsControl = new ResultsViewContainer(results);
       PluginManager.ControlManager.ShowControl(resultsControl);
     }
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1106)
@@ -72,8 +72,15 @@
   </ItemGroup>
   <ItemGroup>
+    <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="IResultsView.cs" />
     <Compile Include="Problem.cs" />
     <Compile Include="DataSet.cs" />
@@ -101,9 +108,9 @@
     <Compile Include="ProblemInjector.cs" />
     <Compile Include="Results.cs" />
-    <Compile Include="ResultsView.cs">
+    <Compile Include="ResultsViewContainer.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="ResultsView.Designer.cs">
-      <DependentUpon>ResultsView.cs</DependentUpon>
+    <Compile Include="ResultsViewContainer.Designer.cs">
+      <DependentUpon>ResultsViewContainer.cs</DependentUpon>
     </Compile>
   </ItemGroup>
@@ -112,8 +119,4 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\HeuristicLab.CEDMA.Charting\HeuristicLab.CEDMA.Charting.csproj">
-      <Project>{1BF17271-5350-476A-8F6D-FC74FA3E82CA}</Project>
-      <Name>HeuristicLab.CEDMA.Charting</Name>
-    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
       <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
@@ -142,4 +145,7 @@
   </ItemGroup>
   <ItemGroup>
+    <EmbeddedResource Include="TableResultsView.resx">
+      <DependentUpon>TableResultsView.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="ConsoleEditor.resx">
       <DependentUpon>ConsoleEditor.cs</DependentUpon>
@@ -155,6 +161,6 @@
       <DependentUpon>ProblemView.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="ResultsView.resx">
-      <DependentUpon>ResultsView.cs</DependentUpon>
+    <EmbeddedResource Include="ResultsViewContainer.resx">
+      <DependentUpon>ResultsViewContainer.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/IResultsView.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/IResultsView.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/IResultsView.cs	(revision 1106)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IResultsView {
+    Control Control { get; }
+    void ShowResults(Results results);
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/Results.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/Results.cs	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/Results.cs	(revision 1106)
@@ -36,6 +36,12 @@
 
 namespace HeuristicLab.CEDMA.Core {
-  public class Results : IViewable, IEnumerable<Record> {
-    private Dictionary<Record, Dataset> datasets;
+  public class Results {
+    public static string[] CategoricalVariables {
+      get { return new string[] { "TargetVariable" }; }
+    }
+
+    public static string[] OrdinalVariables {
+      get { return new string[] { "ValidationMeanAbsolutePercentageError" }; }
+    }
 
     private IStore store;
@@ -47,124 +53,68 @@
     }
 
-    private void ReloadList() {
-      var results = store.Select(new Statement(Ontology.AnyEntity, Ontology.PredicateInstanceOf, Ontology.TypeGeneticProgrammingFunctionTree))
-      .Select(x => store.Select(new SelectFilter(
-        new Entity[] { new Entity(x.Subject.Uri) },
-        new Entity[] { Ontology.PredicateModelAttribute },
-          new Resource[] { Ontology.AnyEntity })));
+    private Entity dataSetEntity;
+
+    public Results(IStore store) {
+      this.store = store;
+    }
+
+    internal void FilterDataSet(Entity entity) {
+      this.dataSetEntity = entity;
+    }
+
+    internal IEnumerable<object[]> SelectRows(List<string> columnNames) {
+      if (store == null) yield return null;
+
+      Resource[] columnNamesRes = columnNames.Select(x => new Literal(x)).ToArray();
+
+      var results = store.Select(new Statement(dataSetEntity, Ontology.PredicateHasModel, Ontology.AnyEntity))
+         .SelectMany(x => store.Select(new SelectFilter(
+           new Entity[] { (Entity)x.Property },
+           new Entity[] { Ontology.PredicateModelAttribute },
+           new Resource[] { Ontology.AnyEntity })))
+         .SelectMany(x =>
+           store.Select(
+              new SelectFilter(
+              new Entity[] { (Entity)x.Property },
+              new Entity[] { Ontology.PredicateModelAttributeName },
+              columnNamesRes)).Select(y =>
+                new {
+                  Model = x.Subject,
+                  Attribute = (Entity)x.Property,
+                  AttributeName = (Literal)y.Property
+                }))
+         .SelectMany(x =>
+           store.Select(
+             new Statement(x.Attribute, Ontology.PredicateModelAttributeValue, Ontology.AnyEntity))
+             .Select(y =>
+               new {
+                 Model = x.Model.Uri,
+                 AttributeName = x.AttributeName.Value,
+                 AttributeValue = ((Literal)y.Property).Value
+               })).GroupBy(x=>x.Model);
+
 
       Random random = new Random();
-      foreach(Statement[] ss in results) {
-        if(ss.Length > 0) {
-          Record r = new Record(this, ss[0].Subject.Uri);
-          r.Set(Record.X_JITTER, random.NextDouble() * 2.0 - 1.0);
-          r.Set(Record.Y_JITTER, random.NextDouble() * 2.0 - 1.0);
-          foreach(Statement s in ss) {
-            string varName;
-            predicateToVariableName.TryGetValue(s.Predicate, out varName);
-            if(varName != null) {
-              if(varName == Record.TREE_HEIGHT || varName == Record.TREE_SIZE || varName == Record.TARGET_VARIABLE) {
-                r.Set(varName, (double)(int)((Literal)s.Property).Value);
-              } else {
-                r.Set(varName, (double)((Literal)s.Property).Value);
-              }
-            }
-          }
-          lock(records) {
-            records.Add(r);
-          }
-          FireRecordAdded(r);
-        }
+      foreach (var row in results) {
+
+        yield return row.Select(x => x.AttributeValue).ToArray();
+        //if (ss.Length > 0) {
+        //  Record r = new Record(this, ss[0].Subject.Uri);
+        //  r.Set(Record.X_JITTER, random.NextDouble() * 2.0 - 1.0);
+        //  r.Set(Record.Y_JITTER, random.NextDouble() * 2.0 - 1.0);
+        //  foreach (Statement s in ss) {
+        //    string varName;
+        //    predicateToVariableName.TryGetValue(s.Predicate, out varName);
+        //    if (varName != null) {
+        //      if (varName == Record.TREE_HEIGHT || varName == Record.TREE_SIZE || varName == Record.TARGET_VARIABLE) {
+        //        r.Set(varName, (double)(int)((Literal)s.Property).Value);
+        //      } else {
+        //        r.Set(varName, (double)((Literal)s.Property).Value);
+        //      }
+        //    }
+        //  }
+        //}
       }
-      FireChanged();
     }
-
-    public Results(IStore store)
-      : base() {
-      this.store = store;
-      records = new List<Record>();
-      datasets = new Dictionary<Record, Dataset>();
-      //predicateToVariableName = new Dictionary<Entity, string>();
-      //predicateToVariableName[targetVariablePredicate] = Record.TARGET_VARIABLE;
-      //predicateToVariableName[treeSizePredicate] = Record.TREE_SIZE;
-      //predicateToVariableName[treeHeightPredicate] = Record.TREE_HEIGHT;
-      //predicateToVariableName[selectionPressurePredicate] = Record.SELECTIONPRESSURE;
-      //predicateToVariableName[trainingMAPEPredicate] = Record.MAPE_TRAINING;
-      //predicateToVariableName[validationMAPEPredicate] = Record.MAPE_VALIDATION;
-      //predicateToVariableName[testMAPEPredicate] = Record.MAPE_TEST;
-      //predicateToVariableName[trainingR2Predicate] = Record.R2_TRAINING;
-      //predicateToVariableName[validationR2Predicate] = Record.R2_VALIDATION;
-      //predicateToVariableName[testR2Predicate] = Record.R2_TEST;
-    }
-
-    public override IView CreateView() {
-      return new ResultsView(this);
-    }
-
-    //internal void OpenModel(Record record) {
-    //  IList<Statement> modelResults = store.Select(new Statement(new Entity(record.Uri), Ontology.PredicateSerializedData, Ontology.AnyEntity));
-    //  if(modelResults.Count == 1) {
-    //    string rawData = ((SerializedLiteral)modelResults[0].Property).RawData;
-    //    XmlDocument doc = new XmlDocument();
-    //    doc.LoadXml(rawData);
-    //    IFunctionTree tree = (IFunctionTree)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
-    //    int targetVariable = (int)record.Get(Record.TARGET_VARIABLE);
-    //    Dataset dataset = GetDataset(record);
-
-    //    ModelView modelView = new ModelView(record, dataset, tree, targetVariable);
-    //    PluginManager.ControlManager.ShowControl(modelView);
-    //  }
-    //}
-
-    //private Dataset GetDataset(Record record) {
-    //  if(!datasets.ContainsKey(record)) {
-    //    IList<Statement> result = store.Select(new Statement(Ontology.AnyEntity, Ontology.PredicateHasModel, new Entity(record.Uri)));
-    //    if(result.Count == 1) {
-    //      IList<Statement> datasetResult = store.Select(new Statement(result[0].Subject, Ontology.PredicateSerializedData, Ontology.AnyEntity));
-    //      if(datasetResult.Count == 1) {
-    //        string rawData = ((SerializedLiteral)datasetResult[0].Property).RawData;
-    //        XmlDocument doc = new XmlDocument();
-    //        doc.LoadXml(rawData);
-    //        Dataset dataset = (Dataset)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
-    //        datasets.Add(record, dataset);
-    //      }
-    //    }
-    //  }
-    //  return datasets[record];
-    //}
-
-    //internal void OpenAlgorithm(Record record) {
-    //  IList<Statement> generatedBy = store.Select(new Statement(new Entity(record.Uri), Ontology.PredicateGeneratedBy, Ontology.AnyEntity));
-    //  if(generatedBy.Count == 1) {
-    //    IList<Statement> algoResult = store.Select(new Statement((Entity)generatedBy[0].Property, Ontology.PredicateSerializedData, Ontology.AnyEntity));
-    //    if(algoResult.Count == 1) {
-    //      string rawData = ((SerializedLiteral)algoResult[0].Property).RawData;
-    //      XmlDocument doc = new XmlDocument();
-    //      doc.LoadXml(rawData);
-    //      IItem algo = (IItem)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
-    //      PluginManager.ControlManager.ShowControl(algo.CreateView());
-    //    }
-    //  }
-    //}
-
-    internal void FilterDataSet(Entity entity) {
-
-    }
-
-    #region IEnumerable<Record> Members
-
-    public IEnumerator<Record> GetEnumerator() {
-      throw new NotImplementedException();
-    }
-
-    #endregion
-
-    #region IEnumerable Members
-
-    IEnumerator IEnumerable.GetEnumerator() {
-      return this.GetEnumerator();
-    }
-
-    #endregion
   }
 }
Index: anches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsView.Designer.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsView.Designer.cs	(revision 1105)
+++ 	(revision )
@@ -1,203 +1,0 @@
-﻿namespace HeuristicLab.CEDMA.Core {
-  partial class ResultsView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if(disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.yJitterLabel = new System.Windows.Forms.Label();
-      this.xJitterlabel = new System.Windows.Forms.Label();
-      this.xTrackBar = new System.Windows.Forms.TrackBar();
-      this.xAxisLabel = new System.Windows.Forms.Label();
-      this.xAxisComboBox = new System.Windows.Forms.ComboBox();
-      this.yAxisLabel = new System.Windows.Forms.Label();
-      this.yAxisComboBox = new System.Windows.Forms.ComboBox();
-      this.yTrackBar = new System.Windows.Forms.TrackBar();
-      this.sizeComboBox = new System.Windows.Forms.ComboBox();
-      this.sizeLabel = new System.Windows.Forms.Label();
-      this.invertCheckbox = new System.Windows.Forms.CheckBox();
-      this.chartPanel = new System.Windows.Forms.Panel();
-      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // yJitterLabel
-      // 
-      this.yJitterLabel.AutoSize = true;
-      this.yJitterLabel.Location = new System.Drawing.Point(3, 30);
-      this.yJitterLabel.Name = "yJitterLabel";
-      this.yJitterLabel.Size = new System.Drawing.Size(29, 13);
-      this.yJitterLabel.TabIndex = 13;
-      this.yJitterLabel.Text = "jitter:";
-      // 
-      // xJitterlabel
-      // 
-      this.xJitterlabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.xJitterlabel.AutoSize = true;
-      this.xJitterlabel.Location = new System.Drawing.Point(291, 418);
-      this.xJitterlabel.Name = "xJitterlabel";
-      this.xJitterlabel.Size = new System.Drawing.Size(29, 13);
-      this.xJitterlabel.TabIndex = 12;
-      this.xJitterlabel.Text = "jitter:";
-      // 
-      // xTrackBar
-      // 
-      this.xTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.xTrackBar.Location = new System.Drawing.Point(326, 418);
-      this.xTrackBar.Maximum = 100;
-      this.xTrackBar.Name = "xTrackBar";
-      this.xTrackBar.Size = new System.Drawing.Size(121, 45);
-      this.xTrackBar.TabIndex = 11;
-      this.xTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
-      this.xTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
-      // 
-      // xAxisLabel
-      // 
-      this.xAxisLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.xAxisLabel.AutoSize = true;
-      this.xAxisLabel.Location = new System.Drawing.Point(305, 394);
-      this.xAxisLabel.Name = "xAxisLabel";
-      this.xAxisLabel.Size = new System.Drawing.Size(15, 13);
-      this.xAxisLabel.TabIndex = 8;
-      this.xAxisLabel.Text = "x:";
-      // 
-      // xAxisComboBox
-      // 
-      this.xAxisComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.xAxisComboBox.FormattingEnabled = true;
-      this.xAxisComboBox.Location = new System.Drawing.Point(326, 391);
-      this.xAxisComboBox.Name = "xAxisComboBox";
-      this.xAxisComboBox.Size = new System.Drawing.Size(121, 21);
-      this.xAxisComboBox.TabIndex = 7;
-      this.xAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.xAxisComboBox_SelectedIndexChanged);
-      // 
-      // yAxisLabel
-      // 
-      this.yAxisLabel.AutoSize = true;
-      this.yAxisLabel.Location = new System.Drawing.Point(3, 6);
-      this.yAxisLabel.Name = "yAxisLabel";
-      this.yAxisLabel.Size = new System.Drawing.Size(15, 13);
-      this.yAxisLabel.TabIndex = 6;
-      this.yAxisLabel.Text = "y:";
-      // 
-      // yAxisComboBox
-      // 
-      this.yAxisComboBox.FormattingEnabled = true;
-      this.yAxisComboBox.Location = new System.Drawing.Point(24, 3);
-      this.yAxisComboBox.Name = "yAxisComboBox";
-      this.yAxisComboBox.Size = new System.Drawing.Size(121, 21);
-      this.yAxisComboBox.TabIndex = 5;
-      this.yAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.yAxisComboBox_SelectedIndexChanged);
-      // 
-      // yTrackBar
-      // 
-      this.yTrackBar.Location = new System.Drawing.Point(38, 30);
-      this.yTrackBar.Maximum = 100;
-      this.yTrackBar.Name = "yTrackBar";
-      this.yTrackBar.Size = new System.Drawing.Size(107, 45);
-      this.yTrackBar.TabIndex = 10;
-      this.yTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
-      this.yTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
-      // 
-      // sizeComboBox
-      // 
-      this.sizeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.sizeComboBox.FormattingEnabled = true;
-      this.sizeComboBox.Location = new System.Drawing.Point(329, 3);
-      this.sizeComboBox.Name = "sizeComboBox";
-      this.sizeComboBox.Size = new System.Drawing.Size(121, 21);
-      this.sizeComboBox.TabIndex = 14;
-      this.sizeComboBox.SelectedIndexChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
-      // 
-      // sizeLabel
-      // 
-      this.sizeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.sizeLabel.AutoSize = true;
-      this.sizeLabel.Location = new System.Drawing.Point(259, 6);
-      this.sizeLabel.Name = "sizeLabel";
-      this.sizeLabel.Size = new System.Drawing.Size(64, 13);
-      this.sizeLabel.TabIndex = 15;
-      this.sizeLabel.Text = "Bubble size:";
-      // 
-      // invertCheckbox
-      // 
-      this.invertCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.invertCheckbox.AutoSize = true;
-      this.invertCheckbox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
-      this.invertCheckbox.Location = new System.Drawing.Point(326, 30);
-      this.invertCheckbox.Name = "invertCheckbox";
-      this.invertCheckbox.Size = new System.Drawing.Size(64, 17);
-      this.invertCheckbox.TabIndex = 16;
-      this.invertCheckbox.Text = "Inverse:";
-      this.invertCheckbox.UseVisualStyleBackColor = true;
-      this.invertCheckbox.CheckedChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
-      // 
-      // chartPanel
-      // 
-      this.chartPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.chartPanel.Location = new System.Drawing.Point(0, 81);
-      this.chartPanel.Name = "chartPanel";
-      this.chartPanel.Size = new System.Drawing.Size(447, 304);
-      this.chartPanel.TabIndex = 17;
-      // 
-      // ResultListView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.chartPanel);
-      this.Controls.Add(this.invertCheckbox);
-      this.Controls.Add(this.sizeLabel);
-      this.Controls.Add(this.sizeComboBox);
-      this.Controls.Add(this.yJitterLabel);
-      this.Controls.Add(this.xJitterlabel);
-      this.Controls.Add(this.xTrackBar);
-      this.Controls.Add(this.xAxisLabel);
-      this.Controls.Add(this.xAxisComboBox);
-      this.Controls.Add(this.yAxisLabel);
-      this.Controls.Add(this.yAxisComboBox);
-      this.Controls.Add(this.yTrackBar);
-      this.Name = "ResultListView";
-      this.Size = new System.Drawing.Size(450, 459);
-      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).EndInit();
-      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label xAxisLabel;
-    private System.Windows.Forms.ComboBox xAxisComboBox;
-    private System.Windows.Forms.Label yAxisLabel;
-    private System.Windows.Forms.ComboBox yAxisComboBox;
-    private System.Windows.Forms.TrackBar yTrackBar;
-    private System.Windows.Forms.TrackBar xTrackBar;
-    private System.Windows.Forms.Label xJitterlabel;
-    private System.Windows.Forms.Label yJitterLabel;
-    private System.Windows.Forms.ComboBox sizeComboBox;
-    private System.Windows.Forms.Label sizeLabel;
-    private System.Windows.Forms.CheckBox invertCheckbox;
-    private System.Windows.Forms.Panel chartPanel;
-  }
-}
Index: anches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsView.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsView.cs	(revision 1105)
+++ 	(revision )
@@ -1,98 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.Charting;
-
-namespace HeuristicLab.CEDMA.Core {
-  public partial class ResultsView : ViewBase {
-    private Results results;
-    private const string FREQUENCY = "<Frequency>";
-    private const string CONSTANT_SIZE = "<constant>";
-    private BubbleChartControl bubbleChartControl;
-    private HistogramControl histogramControl;
-    private Label pleaseSelectAxisLabel = new Label();
-
-    public ResultsView(Results results) {
-      this.results = results;
-      InitializeComponent();
-      InitCharts();
-      xAxisComboBox.Items.AddRange(results.VariableNames);
-      yAxisComboBox.Items.Add(FREQUENCY);
-      yAxisComboBox.Items.AddRange(results.VariableNames);
-      sizeComboBox.Items.Add(CONSTANT_SIZE);
-      sizeComboBox.Items.AddRange(results.VariableNames);
-      sizeComboBox.SelectedItem = sizeComboBox.Items[0];
-      sizeComboBox.Enabled = false;
-      invertCheckbox.Enabled = false;
-      sizeLabel.Enabled = false;
-      yAxisComboBox.SelectedItem = yAxisComboBox.Items[0];
-      xAxisComboBox.SelectedItem = xAxisComboBox.Items[0];
-    }
-
-    private void InitCharts() {
-      bubbleChartControl = new BubbleChartControl();
-      bubbleChartControl.Chart = new BubbleChart(results, 0, 0, 100, 100);
-      histogramControl = new HistogramControl();
-      histogramControl.Chart = new Histogram(results, 0, 0, 100, 100);
-    }
-
-    private void yAxisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      UpdateChart();
-    }
-
-    private void xAxisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      UpdateChart();
-    }
-
-    private void UpdateChart() {
-      if(xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
-      if(yAxisComboBox.SelectedItem.Equals(FREQUENCY)) {
-        xJitterlabel.Enabled = false;
-        xTrackBar.Enabled = false;
-        yJitterLabel.Enabled = false;
-        yTrackBar.Enabled = false;
-        sizeComboBox.Enabled = false;
-        invertCheckbox.Enabled = false;
-        sizeLabel.Enabled = false;
-        chartPanel.Controls.Clear();
-        chartPanel.Controls.Add(histogramControl);
-        histogramControl.Chart.ShowFrequency((string)xAxisComboBox.SelectedItem);
-        histogramControl.Dock = DockStyle.Fill;
-      } else {
-        xJitterlabel.Enabled = true;
-        xTrackBar.Enabled = true;
-        yJitterLabel.Enabled = true;
-        yTrackBar.Enabled = true;
-        sizeComboBox.Enabled = true;
-        invertCheckbox.Enabled = true;
-        sizeLabel.Enabled = true;
-        chartPanel.Controls.Clear();
-        chartPanel.Controls.Add(bubbleChartControl);
-        bubbleChartControl.Chart.ShowXvsY((string)xAxisComboBox.SelectedItem, (string)yAxisComboBox.SelectedItem);
-        bubbleChartControl.Dock = DockStyle.Fill;
-      }
-    }
-
-    private void jitterTrackBar_ValueChanged(object sender, EventArgs e) {
-      if(bubbleChartControl.Chart != null) {
-        double xJitterFactor = xTrackBar.Value / 100.0;
-        double yJitterFactor = yTrackBar.Value / 100.0;
-        bubbleChartControl.Chart.SetJitter(xJitterFactor, yJitterFactor);
-      }
-      UpdateChart();
-    }
-
-    private void sizeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if(bubbleChartControl.Chart != null) {
-        bubbleChartControl.Chart.SetBubbleSizeDimension((string)sizeComboBox.SelectedItem, invertCheckbox.Checked);
-        UpdateChart();
-      }
-    }
-  }
-}
Index: anches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsView.resx
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsView.resx	(revision 1105)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.Designer.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.Designer.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.Designer.cs	(revision 1106)
@@ -0,0 +1,80 @@
+﻿namespace HeuristicLab.CEDMA.Core {
+  partial class ResultsViewContainer {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources 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.viewComboBox = new System.Windows.Forms.ComboBox();
+      this.showButton = new System.Windows.Forms.Button();
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // viewComboBox
+      // 
+      this.viewComboBox.FormattingEnabled = true;
+      this.viewComboBox.Location = new System.Drawing.Point(3, 3);
+      this.viewComboBox.Name = "viewComboBox";
+      this.viewComboBox.Size = new System.Drawing.Size(121, 21);
+      this.viewComboBox.TabIndex = 1;
+      this.viewComboBox.SelectedValueChanged += new System.EventHandler(this.viewComboBox_SelectedValueChanged);
+      // 
+      // showButton
+      // 
+      this.showButton.Location = new System.Drawing.Point(130, 3);
+      this.showButton.Name = "showButton";
+      this.showButton.Size = new System.Drawing.Size(75, 23);
+      this.showButton.TabIndex = 2;
+      this.showButton.Text = "Show";
+      this.showButton.UseVisualStyleBackColor = true;
+      this.showButton.Click += new System.EventHandler(this.showButton_Click);
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewPanel.Location = new System.Drawing.Point(4, 32);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(443, 424);
+      this.viewPanel.TabIndex = 4;
+      // 
+      // ResultsViewContainer
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.viewPanel);
+      this.Controls.Add(this.showButton);
+      this.Controls.Add(this.viewComboBox);
+      this.Name = "ResultsViewContainer";
+      this.Size = new System.Drawing.Size(450, 459);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox viewComboBox;
+    private System.Windows.Forms.Button showButton;
+    private System.Windows.Forms.Panel viewPanel;
+
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.cs	(revision 1106)
@@ -0,0 +1,52 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class ResultsViewContainer : ViewBase {
+    private Results results;
+
+    public ResultsViewContainer(Results results) {
+      this.results = results;
+      InitializeComponent();
+      PopulateViewComboBox();
+      showButton.Enabled = false;
+    }
+
+    private void PopulateViewComboBox() {
+      DiscoveryService service = new DiscoveryService();
+      Type[] viewTypes = service.GetTypes(typeof(IResultsView));
+      foreach (Type t in viewTypes)
+        viewComboBox.Items.Add(t);
+    }
+
+    private void showButton_Click(object sender, EventArgs e) {
+      viewPanel.Controls.Clear();
+      try {
+        Type type = (Type)viewComboBox.SelectedItem;
+        IResultsView view = (IResultsView)Activator.CreateInstance(type);
+        Control control = view.Control;
+        viewPanel.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        view.ShowResults(results);
+      }
+      catch (Exception ex) {
+        Label errorLabel = new Label();
+        errorLabel.Text = "Couldn't load selected view: " + viewComboBox.SelectedItem + "\n" + ex.Message;
+        viewPanel.Controls.Add(errorLabel);
+        errorLabel.Dock = DockStyle.Fill;
+      }
+    }
+
+    private void viewComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      showButton.Enabled = viewComboBox.SelectedItem != null;
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.resx
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.resx	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/ResultsViewContainer.resx	(revision 1106)
@@ -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/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs	(revision 1106)
@@ -0,0 +1,59 @@
+﻿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;
+      // 
+      // 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/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.cs	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.cs	(revision 1106)
@@ -0,0 +1,46 @@
+﻿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;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class TableResultsView : ViewBase, IResultsView {
+    private Results results;
+    public TableResultsView() {
+      InitializeComponent();
+    }
+
+    public Control Control {
+      get { return this; }
+    }
+
+    public void ShowResults(Results results) {
+      this.results = results;
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (results == null) return;
+      List<string> columnNames = new List<string>();
+      columnNames.AddRange(Results.CategoricalVariables);
+      columnNames.AddRange(Results.OrdinalVariables);
+      dataGridView.Rows.Clear();
+      dataGridView.Columns.Clear();
+      foreach (string varName in columnNames) {
+        dataGridView.Columns.Add(varName, varName);
+      }
+
+      foreach (object[] row in results.SelectRows(columnNames)) {
+        dataGridView.Rows.Add(row);
+      }
+      dataGridView.Update();
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.resx
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.resx	(revision 1106)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.Core/TableResultsView.resx	(revision 1106)
@@ -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/CEDMA-Refactoring-Ticket419/HeuristicLab.sln
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.sln	(revision 1105)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.sln	(revision 1106)
@@ -733,5 +733,4 @@
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Visualization Debug|x86.Build.0 = Debug|x86
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
-		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -747,5 +746,4 @@
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Visualization Debug|x86.Build.0 = Debug|x86
 		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
-		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{74223A32-C726-4978-BE78-37113A18373C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -761,5 +759,4 @@
 		{74223A32-C726-4978-BE78-37113A18373C}.Visualization Debug|x86.Build.0 = Debug|x86
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
-		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -775,5 +772,4 @@
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Visualization Debug|x86.Build.0 = Debug|x86
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
-		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
