Index: trunk/sources/HeuristicLab.CEDMA.Core/Console.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Console.cs	(revision 552)
+++ trunk/sources/HeuristicLab.CEDMA.Core/Console.cs	(revision 553)
@@ -33,4 +33,5 @@
   public class Console : ItemBase, IEditable {
     private AgentList agentList;
+    private ResultList resultsList;
     private DatabaseOperatorLibrary operatorLibary;
     private ChannelFactory<IDatabase> factory;
@@ -45,4 +46,8 @@
     }
 
+    public ResultList ResultsList {
+      get { return resultsList; }
+    }
+
     public IOperatorLibrary OperatorLibrary {
       get { return operatorLibary; }
@@ -52,4 +57,5 @@
       : base() {
       agentList = new AgentList();
+      resultsList = new ResultList();
       operatorLibary = new DatabaseOperatorLibrary();
     }
@@ -89,4 +95,8 @@
       agentList.Database = database;
       operatorLibary.Database = database;
+
+      ChannelFactory<IStore> storeFactory = new ChannelFactory<IStore>(binding);
+      IStore store = storeFactory.CreateChannel(new EndpointAddress(serverUri + "/RdfStore"));
+      resultsList.Store = store;
     }
     #endregion
Index: trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 552)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 553)
@@ -28,4 +28,7 @@
 using System.ServiceModel;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Charting;
+using System.Drawing;
+using HeuristicLab.CEDMA.DB.Interfaces;
 
 namespace HeuristicLab.CEDMA.Core {
@@ -39,7 +42,7 @@
     private Label projectLabel;
     private Button newButton;
-    private System.ComponentModel.IContainer components;
     private Button opLibButton;
     private Label label1;
+    private TabPage resultsTabPage;
     private Console console;
 
@@ -54,4 +57,5 @@
       this.tabControl = new System.Windows.Forms.TabControl();
       this.agentsPage = new System.Windows.Forms.TabPage();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
       this.connectButton = new System.Windows.Forms.Button();
       this.comboBox1 = new System.Windows.Forms.ComboBox();
@@ -85,4 +89,5 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.tabControl.Controls.Add(this.agentsPage);
+      this.tabControl.Controls.Add(this.resultsTabPage);
       this.tabControl.Enabled = false;
       this.tabControl.Location = new System.Drawing.Point(6, 85);
@@ -101,4 +106,14 @@
       this.agentsPage.Text = "Agents";
       this.agentsPage.UseVisualStyleBackColor = true;
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsTabPage.Size = new System.Drawing.Size(498, 352);
+      this.resultsTabPage.TabIndex = 2;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
       // 
       // connectButton
@@ -189,4 +204,7 @@
         agentsPage.Controls.Add((Control)console.AgentList.CreateView());
         agentsPage.Controls[0].Dock = DockStyle.Fill;
+        resultsTabPage.Controls.Clear();
+        resultsTabPage.Controls.Add((Control)console.ResultsList.CreateView());
+        resultsTabPage.Controls[0].Dock = DockStyle.Fill;
         opLibButton.Enabled = true;
         opLibButton.Enabled = true;
Index: trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 552)
+++ trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 553)
@@ -33,5 +33,25 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\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="HeuristicLab.Charting, Version=3.0.0.91, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.Charting\bin\Debug\HeuristicLab.Charting.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -62,4 +82,6 @@
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Include="Histogram.cs" />
+    <Compile Include="ResultList.cs" />
     <Compile Include="ResultTable.cs" />
     <Compile Include="ResultExporter.cs" />
@@ -92,4 +114,10 @@
       <DependentUpon>AgentView.cs</DependentUpon>
     </Compile>
+    <Compile Include="ResultListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ResultListView.Designer.cs">
+      <DependentUpon>ResultListView.cs</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
@@ -100,4 +128,8 @@
       <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
       <Name>HeuristicLab.CEDMA.DB.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Charting.Data\HeuristicLab.Charting.Data.csproj">
+      <Project>{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}</Project>
+      <Name>HeuristicLab.Charting.Data</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
@@ -131,4 +163,8 @@
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="ResultListView.resx">
+      <DependentUpon>ResultListView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: trunk/sources/HeuristicLab.CEDMA.Core/Histogram.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Histogram.cs	(revision 553)
+++ trunk/sources/HeuristicLab.CEDMA.Core/Histogram.cs	(revision 553)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Histogram {
+    private int buckets;
+    public int Buckets {
+      get { return buckets; }
+      set {
+        buckets = value;
+        ResetBucketBounds();
+      }
+    }
+
+    private double[] limit;
+
+    private List<double> values;
+
+    public Histogram(int buckets) {
+      this.buckets = buckets;
+      values = new List<double>();
+    }
+
+    public double LowerValue(int bucketIndex) {
+      return limit[bucketIndex];
+    }
+
+    public double UpperValue(int bucketIndex) {
+      return limit[bucketIndex+1];
+    }
+
+    public int Frequency(int bucketIndex) {
+      return values.Count(x => x >= LowerValue(bucketIndex) && x < UpperValue(bucketIndex));
+    }
+
+    public void AddValues(IEnumerable<double> xs) {
+      values.AddRange(xs.Where(x=>
+        !double.IsInfinity(x) && !double.IsNaN(x) && double.MaxValue!=x && double.MinValue !=x));
+      ResetBucketBounds();
+    }
+
+    private void ResetBucketBounds() {
+      limit = new double[buckets+1];
+      values.Sort();
+      double min = values[10];
+      double max = values[values.Count-10];
+
+      double step = (max - min) / buckets;
+      double cur = min;
+      for(int i = 0; i < buckets+1; i++) {
+        limit[i] = cur;
+        cur += step;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultList.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultList.cs	(revision 553)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ResultList.cs	(revision 553)
@@ -0,0 +1,165 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.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 ResultList : ItemBase {
+    private const string cedmaNS = "http://www.heuristiclab.com/cedma/";
+
+    private const string MAPE_TRAINING = "MAPE (training)";
+    private const string MAPE_VALIDATION = "MAPE (validation)";
+    private const string MAPE_TEST = "MAPE (test)";
+    private const string R2_TRAINING = "R2 (training)";
+    private const string R2_VALIDATION = "R2 (validation)";
+    private const string R2_TEST = "R2 (test)";
+    private const string TARGET_VARIABLE = "Target variable";
+    private const string TREE_SIZE = "Tree size";
+    private const string TREE_HEIGHT = "Tree height";
+
+    private readonly Entity targetVariablePredicate = new Entity(cedmaNS + "TargetVariable");
+    private readonly Entity trainingMAPEPredicate = new Entity(cedmaNS + "MeanAbsolutePercentageErrorTraining");
+    private readonly Entity validationMAPEPredicate = new Entity(cedmaNS + "MeanAbsolutePercentageErrorValidation");
+    private readonly Entity testMAPEPredicate = new Entity(cedmaNS + "MeanAbsolutePercentageErrorTest");
+    private readonly Entity trainingR2Predicate = new Entity(cedmaNS + "CoefficientOfDeterminationTraining");
+    private readonly Entity validationR2Predicate = new Entity(cedmaNS + "CoefficientOfDeterminationValidation");
+    private readonly Entity testR2Predicate = new Entity(cedmaNS + "CoefficientOfDeterminationTest");
+    private readonly Entity treeSizePredicate = new Entity(cedmaNS + "TreeSize");
+    private readonly Entity treeHeightPredicate = new Entity(cedmaNS + "TreeHeight");
+    private readonly Entity anyEntity = new Entity(null);
+
+    private IStore store;
+    public IStore Store {
+      get { return store; }
+      set {
+        store = value;
+        ReloadList();
+        FireChanged();
+      }
+    }
+    private List<string> variableNames = new List<string>() { TARGET_VARIABLE, TREE_SIZE, TREE_HEIGHT,
+    MAPE_TRAINING, MAPE_VALIDATION, MAPE_TEST,
+    R2_TRAINING, R2_VALIDATION, R2_TEST};
+    public string[] VariableNames {
+      get {
+        return variableNames.ToArray();
+      }
+    }
+    private Dictionary<string, List<double>> allVariables;
+
+    private void ReloadList() {
+      allVariables.Clear();
+      List<double> trainingMAPE = new List<double>();
+      List<double> validationMAPE = new List<double>();
+      List<double> testMAPE = new List<double>();
+      List<double> trainingR2 = new List<double>();
+      List<double> validationR2 = new List<double>();
+      List<double> testR2 = new List<double>();
+      List<double> size = new List<double>();
+      List<double> height = new List<double>();
+      List<double> targetVariable = new List<double>();
+      allVariables[MAPE_TRAINING] = trainingMAPE;
+      allVariables[MAPE_VALIDATION] = validationMAPE;
+      allVariables[MAPE_TEST] = testMAPE;
+      allVariables[R2_TRAINING] = trainingR2;
+      allVariables[R2_VALIDATION] = validationR2;
+      allVariables[R2_TEST] = testR2;
+      allVariables[TREE_SIZE] = size;
+      allVariables[TREE_HEIGHT] = height;
+      allVariables[TARGET_VARIABLE] = targetVariable;
+
+      var results = store.Select(new Statement(anyEntity, new Entity(cedmaNS + "instanceOf"), new Literal("class:GpFunctionTree")))
+      .Select(x => store.Select(new SelectFilter(
+        new Entity[] { new Entity(x.Subject.Uri) },
+        new Entity[] { targetVariablePredicate, treeSizePredicate, treeHeightPredicate,
+          trainingMAPEPredicate, validationMAPEPredicate, testMAPEPredicate,
+          trainingR2Predicate, validationR2Predicate, testR2Predicate },
+          new Resource[] { anyEntity })));
+
+      Random random = new Random(); // for adding random noise to int values
+      foreach(Statement[] ss in results) {
+        targetVariable.Add(double.NaN);
+        size.Add(double.NaN);
+        height.Add(double.NaN);
+        trainingMAPE.Add(double.NaN);
+        validationMAPE.Add(double.NaN);
+        testMAPE.Add(double.NaN);
+        trainingR2.Add(double.NaN);
+        validationR2.Add(double.NaN);
+        testR2.Add(double.NaN);
+        foreach(Statement s in ss) {
+          if(s.Predicate.Equals(targetVariablePredicate)) {
+            ReplaceLastItem(targetVariable, (double)(int)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(treeSizePredicate)) {
+            ReplaceLastItem(size, (double)(int)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(treeHeightPredicate)) {
+            ReplaceLastItem(height, (double)(int)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(trainingMAPEPredicate)) {
+            ReplaceLastItem(trainingMAPE, (double)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(validationMAPEPredicate)) {
+            ReplaceLastItem(validationMAPE, (double)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(testMAPEPredicate)) {
+            ReplaceLastItem(testMAPE, (double)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(trainingR2Predicate)) {
+            ReplaceLastItem(trainingR2, (double)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(validationR2Predicate)) {
+            ReplaceLastItem(validationR2, (double)((Literal)s.Property).Value);
+          } else if(s.Predicate.Equals(testR2Predicate)) {
+            ReplaceLastItem(testR2, (double)((Literal)s.Property).Value);
+          }
+        }
+      }
+    }
+
+    private void ReplaceLastItem(List<double> xs, double x) {
+      xs.RemoveAt(xs.Count - 1); xs.Add(x);
+    }
+
+    public ResultList()
+      : base() {
+      allVariables = new Dictionary<string, List<double>>();
+    }
+
+    public override IView CreateView() {
+      return new ResultListView(this);
+    }
+
+    internal Histogram GetHistogram(string variableName) {
+      Histogram h = new Histogram(50);
+      h.AddValues(allVariables[variableName]);
+      return h;
+    }
+
+    internal IList<double> GetValues(string variableName) {
+      return allVariables[variableName];
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.Designer.cs	(revision 553)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.Designer.cs	(revision 553)
@@ -0,0 +1,108 @@
+﻿namespace HeuristicLab.CEDMA.Core {
+  partial class ResultListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.dataChart = new HeuristicLab.Charting.Data.DataChartControl();
+      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.SuspendLayout();
+      // 
+      // dataChart
+      // 
+      this.dataChart.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.dataChart.BackColor = System.Drawing.SystemColors.Control;
+      this.dataChart.Chart = null;
+      this.dataChart.Location = new System.Drawing.Point(3, 30);
+      this.dataChart.Name = "dataChart";
+      this.dataChart.ScaleOnResize = true;
+      this.dataChart.Size = new System.Drawing.Size(447, 390);
+      this.dataChart.TabIndex = 9;
+      // 
+      // 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, 429);
+      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, 426);
+      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);
+      // 
+      // ResultView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataChart);
+      this.Controls.Add(this.xAxisLabel);
+      this.Controls.Add(this.xAxisComboBox);
+      this.Controls.Add(this.yAxisLabel);
+      this.Controls.Add(this.yAxisComboBox);
+      this.Name = "ResultView";
+      this.Size = new System.Drawing.Size(450, 450);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Charting.Data.DataChartControl dataChart;
+    private System.Windows.Forms.Label xAxisLabel;
+    private System.Windows.Forms.ComboBox xAxisComboBox;
+    private System.Windows.Forms.Label yAxisLabel;
+    private System.Windows.Forms.ComboBox yAxisComboBox;
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.cs	(revision 553)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.cs	(revision 553)
@@ -0,0 +1,92 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class ResultListView : ViewBase {
+    private ResultList results;
+    private const string FREQUENCY = "<Frequency>";
+
+    public ResultListView(ResultList results) {
+      this.results = results;
+      InitializeComponent();
+      dataChart.Chart = new HeuristicLab.Charting.Data.Datachart(0, 0, 100, 1);
+      xAxisComboBox.Items.AddRange(results.VariableNames);
+      yAxisComboBox.Items.Add(FREQUENCY);
+      yAxisComboBox.Items.AddRange(results.VariableNames);
+    }
+
+    private void yAxisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void xAxisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      double minX = double.PositiveInfinity;
+      double minY = double.PositiveInfinity;
+      double maxX = double.NegativeInfinity;
+      double maxY = double.NegativeInfinity;
+      if(xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
+      if(yAxisComboBox.SelectedItem.Equals(FREQUENCY)) {
+        Color curCol = Color.Blue;
+        Pen p = new Pen(curCol);
+        SolidBrush b = new SolidBrush(curCol);
+        // frequency
+        dataChart.Chart = new HeuristicLab.Charting.Data.Datachart(0, 0, 100, 100);
+        dataChart.Chart.UpdateEnabled = false;
+        dataChart.Chart.Group.Add(new Axis(dataChart.Chart, 0, 0, AxisType.Both));
+        Histogram h = results.GetHistogram((string)xAxisComboBox.SelectedItem);
+        for(int i = 0; i < h.Buckets; i++) {
+          double lower = h.LowerValue(i);
+          double upper = h.UpperValue(i);
+          int freq = h.Frequency(i);
+          if(lower < minX) minX = lower;
+          if(upper > maxX) maxX = upper;
+          if(freq > maxY) maxY = freq;
+          dataChart.Chart.AddDataRow(HeuristicLab.Charting.Data.DataRowType.Bars, p, b);
+          dataChart.Chart.AddDataPoint(0, lower, 0);
+          dataChart.Chart.AddDataPoint(0, upper, freq);
+        }
+        minY = 0;
+
+        dataChart.Chart.UpdateEnabled = true;
+      } else {
+        Color curCol = Color.FromArgb(30, Color.Blue);
+        Pen p = new Pen(curCol);
+        SolidBrush b = new SolidBrush(curCol);
+        IList<double> xs = results.GetValues((string)xAxisComboBox.SelectedItem);
+        IList<double> ys = results.GetValues((string)yAxisComboBox.SelectedItem);
+        dataChart.Chart = new HeuristicLab.Charting.Data.Datachart(0, 0, 100, 100);
+        dataChart.Chart.UpdateEnabled = false;
+        dataChart.Chart.Group.Add(new Axis(dataChart.Chart, 0, 0, AxisType.Both));
+        dataChart.Chart.AddDataRow(HeuristicLab.Charting.Data.DataRowType.Points, p, b);
+        for(int i = 0; i < xs.Count; i++) {
+          double x = xs[i];
+          double y = ys[i];
+          if(double.IsInfinity(x) || x == double.MaxValue || x == double.MinValue) x = double.NaN;
+          if(double.IsInfinity(y) || y == double.MaxValue || y == double.MinValue) y = double.NaN;
+          if(!double.IsNaN(x) && !double.IsNaN(y)) {
+            dataChart.Chart.AddDataPoint(0, x, y);
+            if(x > maxX) maxX = x;
+            if(y > maxY) maxY = y;
+            if(x < minX) minX = x;
+            if(y < minY) minY = y;
+          }
+        }
+        dataChart.Chart.UpdateEnabled = true;
+      }
+
+      dataChart.Chart.ZoomIn(minX, minY, maxX, maxY);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.resx	(revision 553)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ResultListView.resx	(revision 553)
@@ -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>
