Index: trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1287)
@@ -27,7 +27,13 @@
 using HeuristicLab.Charting;
 using System.Windows.Forms;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
 
 namespace HeuristicLab.CEDMA.Charting {
   public class BubbleChart : Chart {
+    private const string X_JITTER = "__X_JITTER";
+    private const string Y_JITTER = "__Y_JITTER";
     private const double maxXJitterPercent = 0.05;
     private const double maxYJitterPercent = 0.05;
@@ -49,21 +55,26 @@
     private double maxX = double.NegativeInfinity;
     private double maxY = double.NegativeInfinity;
-    private List<Record> records;
-    private ResultList results;
-    private Dictionary<IPrimitive, Record> primitiveToRecordDictionary;
-    private Dictionary<Record, IPrimitive> recordToPrimitiveDictionary;
+    private List<ResultsEntry> records;
+    private Results results;
+    private Dictionary<IPrimitive, ResultsEntry> primitiveToEntryDictionary;
+    private Dictionary<ResultsEntry, IPrimitive> entryToPrimitiveDictionary;
     private Random random = new Random();
     private Group points;
 
-    public BubbleChart(ResultList results, PointD lowerLeft, PointD upperRight)
+    public BubbleChart(Results results, PointD lowerLeft, PointD upperRight)
       : base(lowerLeft, upperRight) {
-      records = new List<Record>();
-      primitiveToRecordDictionary = new Dictionary<IPrimitive, Record>();
-      recordToPrimitiveDictionary = new Dictionary<Record, IPrimitive>();
+      records = new List<ResultsEntry>();
+      primitiveToEntryDictionary = new Dictionary<IPrimitive, ResultsEntry>();
+      entryToPrimitiveDictionary = new Dictionary<ResultsEntry, IPrimitive>();
       this.results = results;
-      foreach(Record r in results.Records) {
-        records.Add(r);
-     }
-      results.OnRecordAdded += new EventHandler<RecordAddedEventArgs>(results_OnRecordAdded);
+
+      foreach (var resultsEntry in results.GetEntries()) {
+        if (resultsEntry.Get(X_JITTER) == null)
+          resultsEntry.Set(X_JITTER, random.NextDouble() * 2.0 - 1.0);
+        if (resultsEntry.Get(Y_JITTER) == null)
+          resultsEntry.Set(Y_JITTER, random.NextDouble() * 2.0 - 1.0);
+        records.Add(resultsEntry);
+      }
+
       results.Changed += new EventHandler(results_Changed);
     }
@@ -74,12 +85,6 @@
     }
 
-    public BubbleChart(ResultList results, double x1, double y1, double x2, double y2)
+    public BubbleChart(Results results, double x1, double y1, double x2, double y2)
       : this(results, new PointD(x1, y1), new PointD(x2, y2)) {
-    }
-
-    void results_OnRecordAdded(object sender, RecordAddedEventArgs e) {
-      lock(records) {
-        records.Add(e.Record);
-      }
     }
 
@@ -92,7 +97,8 @@
 
     public void ShowXvsY(string xDimension, string yDimension) {
-      if(this.xDimension != xDimension || this.yDimension != yDimension) {
+      if (this.xDimension != xDimension || this.yDimension != yDimension) {
         this.xDimension = xDimension;
         this.yDimension = yDimension;
+
         ResetViewSize();
         Repaint();
@@ -109,51 +115,67 @@
 
     private void Repaint() {
-      if(xDimension == null || yDimension == null) return;
-      lock(records) {
-        double maxSize = 1;
-        double minSize = 1;
-        if(sizeDimension != null) {
-          var sizes = records.Select(r => r.Get(sizeDimension)).Where(x => !double.IsInfinity(x) && x != double.MaxValue && x != double.MinValue).OrderBy(x=>x);
+      if (xDimension == null || yDimension == null) return;
+      double maxSize = 1;
+      double minSize = 1;
+      try {
+        if (sizeDimension != null && results.OrdinalVariables.Contains(sizeDimension)) {
+          var sizes = records
+            .Select(x => Convert.ToDouble(x.Get(sizeDimension)))
+            .Where(size => !double.IsInfinity(size) && size != double.MaxValue && size != double.MinValue)
+            .OrderBy(r => r);
           minSize = sizes.ElementAt((int)(sizes.Count() * 0.1));
           maxSize = sizes.ElementAt((int)(sizes.Count() * 0.9));
         }
-        UpdateEnabled = false;
-        Group.Clear();
-        primitiveToRecordDictionary.Clear();
-        recordToPrimitiveDictionary.Clear();
-        points = new Group(this);
-        Group.Add(new Axis(this, 0, 0, AxisType.Both));
-        UpdateViewSize(0, 0, 5);
-        foreach(Record r in records) {
-          double x = r.Get(xDimension) + r.Get(Record.X_JITTER) * xJitterFactor;
-          double y = r.Get(yDimension) + r.Get(Record.Y_JITTER) * yJitterFactor;
-          int size = CalculateSize(r.Get(sizeDimension), minSize, maxSize);
-
-          if(double.IsInfinity(x) || x == double.MaxValue || x == double.MinValue) x = double.NaN;
-          if(double.IsInfinity(y) || y == double.MaxValue || y == double.MinValue) y = double.NaN;
-          if(!double.IsNaN(x) && !double.IsNaN(y)) {
-            UpdateViewSize(x, y, size);
-            int alpha = CalculateAlpha(size);
-            Pen pen = new Pen(Color.FromArgb(alpha, r.Selected ? selectionColor : defaultColor));
-            Brush brush = pen.Brush;
-            FixedSizeCircle c = new FixedSizeCircle(this, x, y, size, pen, brush);
-            c.ToolTipText = r.GetToolTipText();
-            points.Add(c);
-            if(!r.Selected) c.IntoBackground();
-            primitiveToRecordDictionary[c] = r;
-            recordToPrimitiveDictionary[r] = c;
-          }
-        }
-        Group.Add(points);
-        UpdateEnabled = true;
-      }
+      }
+      catch (InvalidCastException) {
+        minSize = 1;
+        maxSize = 1;
+      }
+      UpdateEnabled = false;
+      Group.Clear();
+      primitiveToEntryDictionary.Clear();
+      entryToPrimitiveDictionary.Clear();
+      points = new Group(this);
+      Group.Add(new Axis(this, 0, 0, AxisType.Both));
+      UpdateViewSize(0, 0, 5);
+      foreach (ResultsEntry r in records) {
+        double x, y;
+        int size;
+        try {
+          x = Convert.ToDouble(r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
+          y = Convert.ToDouble(r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
+          size = CalculateSize(Convert.ToDouble(r.Get(sizeDimension)), minSize, maxSize);
+        }
+        catch (InvalidCastException) {
+          x = double.NaN;
+          y = double.NaN;
+          size = minBubbleSize;
+        }
+        if (double.IsInfinity(x) || x == double.MaxValue || x == double.MinValue) x = double.NaN;
+        if (double.IsInfinity(y) || y == double.MaxValue || y == double.MinValue) y = double.NaN;
+        if (!double.IsNaN(x) && !double.IsNaN(y)) {
+          UpdateViewSize(x, y, size);
+          int alpha = CalculateAlpha(size);
+          Pen pen = new Pen(Color.FromArgb(alpha, r.Selected ? selectionColor : defaultColor));
+          Brush brush = pen.Brush;
+          FixedSizeCircle c = new FixedSizeCircle(this, x, y, size, pen, brush);
+          c.ToolTipText = r.GetToolTipText();
+          points.Add(c);
+          if (!r.Selected) c.IntoBackground();
+          primitiveToEntryDictionary[c] = r;
+          entryToPrimitiveDictionary[r] = c;
+        }
+      }
+      Group.Add(points);
+      UpdateEnabled = true;
     }
 
     private int CalculateSize(double size, double minSize, double maxSize) {
-      if(double.IsNaN(size) || double.IsInfinity(size) || size == double.MaxValue || size == double.MinValue) return minBubbleSize;
-      if(size > maxSize) size = maxSize;
-      if(size < minSize) size = minSize;
+      if (double.IsNaN(size) || double.IsInfinity(size) || size == double.MaxValue || size == double.MinValue) return minBubbleSize;
+      if (size > maxSize) size = maxSize;
+      if (size < minSize) size = minSize;
+      if (Math.Abs(maxSize - minSize) < 1.0E-10) return minBubbleSize;
       double sizeDifference = ((size - minSize) / (maxSize - minSize) * (maxBubbleSize - minBubbleSize));
-      if(invertSize) return maxBubbleSize - (int)sizeDifference;
+      if (invertSize) return maxBubbleSize - (int)sizeDifference;
       else return minBubbleSize + (int)sizeDifference;
     }
@@ -164,5 +186,5 @@
 
     private void ZoomToViewSize() {
-      if(minX < maxX && minY < maxY) {
+      if (minX < maxX && minY < maxY) {
         // enlarge view by 5% on each side
         double width = maxX - minX;
@@ -177,8 +199,8 @@
 
     private void UpdateViewSize(double x, double y, double size) {
-      if(x - size < minX) minX = x - size;
-      if(x + size > maxX) maxX = x + size;
-      if(y - size < minY) minY = y + size;
-      if(y + size > maxY) maxY = y + size;
+      if (x - size < minX) minX = x - size;
+      if (x + size > maxX) maxX = x + size;
+      if (y - size < minY) minY = y + size;
+      if (y + size > maxY) maxY = y + size;
     }
 
@@ -190,9 +212,9 @@
     }
 
-    internal Record GetRecord(Point point) {
-      Record r = null;
+    internal ResultsEntry GetResultsEntry(Point point) {
+      ResultsEntry r = null;
       IPrimitive p = points.GetPrimitive(TransformPixelToWorld(point));
-      if(p != null) {
-        primitiveToRecordDictionary.TryGetValue(p, out r);
+      if (p != null) {
+        primitiveToEntryDictionary.TryGetValue(p, out r);
       }
       return r;
@@ -201,5 +223,5 @@
 
     public override void MouseDrag(Point start, Point end, MouseButtons button) {
-      if(button == MouseButtons.Left && Mode == ChartMode.Select) {
+      if (button == MouseButtons.Left && Mode == ChartMode.Select) {
         PointD a = TransformPixelToWorld(start);
         PointD b = TransformPixelToWorld(end);
@@ -213,12 +235,12 @@
         primitives.AddRange(points.Primitives);
 
-        foreach(FixedSizeCircle p in primitives) {
-          if(rect.ContainsPoint(p.Point)) {
-            Record r;
-            primitiveToRecordDictionary.TryGetValue(p, out r);
-            if(r != null) r.ToggleSelected();
+        foreach (FixedSizeCircle p in primitives) {
+          if (rect.ContainsPoint(p.Point)) {
+            ResultsEntry r;
+            primitiveToEntryDictionary.TryGetValue(p, out r);
+            if (r != null) r.ToggleSelected();
           }
         }
-        results.FireChanged();
+        if (primitives.Count() > 0) results.FireChanged();
       } else {
         base.MouseDrag(start, end, button);
@@ -227,7 +249,7 @@
 
     public override void MouseClick(Point point, MouseButtons button) {
-      if(button == MouseButtons.Left) {
-        Record r = GetRecord(point);
-        if(r != null) r.ToggleSelected();
+      if (button == MouseButtons.Left) {
+        ResultsEntry r = GetResultsEntry(point);
+        if (r != null) r.ToggleSelected();
         results.FireChanged();
       } else {
@@ -237,7 +259,11 @@
 
     public override void MouseDoubleClick(Point point, MouseButtons button) {
-      if(button == MouseButtons.Left) {
-        Record r = GetRecord(point);
-        if(r != null) r.OpenModel();
+      if (button == MouseButtons.Left) {
+        ResultsEntry entry = GetResultsEntry(point);
+        if (entry != null) {
+          string serializedData = (string)entry.Get(Ontology.PredicateSerializedData.Uri.Replace(Ontology.CedmaNameSpace, ""));
+          var model = (IItem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(serializedData));
+          PluginManager.ControlManager.ShowControl(model.CreateView());
+        }
       } else {
         base.MouseDoubleClick(point, button);
Index: trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.Designer.cs	(revision 1287)
@@ -0,0 +1,206 @@
+﻿namespace HeuristicLab.CEDMA.Charting {
+  partial class BubbleChartView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.yJitterLabel = new System.Windows.Forms.Label();
+      this.xJitterlabel = new System.Windows.Forms.Label();
+      this.xTrackBar = new System.Windows.Forms.TrackBar();
+      this.xAxisLabel = new System.Windows.Forms.Label();
+      this.xAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.yAxisLabel = new System.Windows.Forms.Label();
+      this.yAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.yTrackBar = new System.Windows.Forms.TrackBar();
+      this.sizeComboBox = new System.Windows.Forms.ComboBox();
+      this.sizeLabel = new System.Windows.Forms.Label();
+      this.invertCheckbox = new System.Windows.Forms.CheckBox();
+      this.bubbleChartControl = new HeuristicLab.CEDMA.Charting.BubbleChartControl();
+      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // yJitterLabel
+      // 
+      this.yJitterLabel.AutoSize = true;
+      this.yJitterLabel.Location = new System.Drawing.Point(3, 30);
+      this.yJitterLabel.Name = "yJitterLabel";
+      this.yJitterLabel.Size = new System.Drawing.Size(29, 13);
+      this.yJitterLabel.TabIndex = 13;
+      this.yJitterLabel.Text = "jitter:";
+      // 
+      // xJitterlabel
+      // 
+      this.xJitterlabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xJitterlabel.AutoSize = true;
+      this.xJitterlabel.Location = new System.Drawing.Point(291, 418);
+      this.xJitterlabel.Name = "xJitterlabel";
+      this.xJitterlabel.Size = new System.Drawing.Size(29, 13);
+      this.xJitterlabel.TabIndex = 12;
+      this.xJitterlabel.Text = "jitter:";
+      // 
+      // xTrackBar
+      // 
+      this.xTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xTrackBar.Location = new System.Drawing.Point(326, 418);
+      this.xTrackBar.Maximum = 100;
+      this.xTrackBar.Name = "xTrackBar";
+      this.xTrackBar.Size = new System.Drawing.Size(121, 45);
+      this.xTrackBar.TabIndex = 11;
+      this.xTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.xTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // xAxisLabel
+      // 
+      this.xAxisLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisLabel.AutoSize = true;
+      this.xAxisLabel.Location = new System.Drawing.Point(305, 394);
+      this.xAxisLabel.Name = "xAxisLabel";
+      this.xAxisLabel.Size = new System.Drawing.Size(15, 13);
+      this.xAxisLabel.TabIndex = 8;
+      this.xAxisLabel.Text = "x:";
+      // 
+      // xAxisComboBox
+      // 
+      this.xAxisComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisComboBox.FormattingEnabled = true;
+      this.xAxisComboBox.Location = new System.Drawing.Point(326, 391);
+      this.xAxisComboBox.Name = "xAxisComboBox";
+      this.xAxisComboBox.Size = new System.Drawing.Size(121, 21);
+      this.xAxisComboBox.TabIndex = 7;
+      this.xAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.axisComboBox_SelectedIndexChanged);
+      // 
+      // yAxisLabel
+      // 
+      this.yAxisLabel.AutoSize = true;
+      this.yAxisLabel.Location = new System.Drawing.Point(3, 6);
+      this.yAxisLabel.Name = "yAxisLabel";
+      this.yAxisLabel.Size = new System.Drawing.Size(15, 13);
+      this.yAxisLabel.TabIndex = 6;
+      this.yAxisLabel.Text = "y:";
+      // 
+      // yAxisComboBox
+      // 
+      this.yAxisComboBox.FormattingEnabled = true;
+      this.yAxisComboBox.Location = new System.Drawing.Point(24, 3);
+      this.yAxisComboBox.Name = "yAxisComboBox";
+      this.yAxisComboBox.Size = new System.Drawing.Size(121, 21);
+      this.yAxisComboBox.TabIndex = 5;
+      this.yAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.axisComboBox_SelectedIndexChanged);
+      // 
+      // yTrackBar
+      // 
+      this.yTrackBar.Location = new System.Drawing.Point(38, 30);
+      this.yTrackBar.Maximum = 100;
+      this.yTrackBar.Name = "yTrackBar";
+      this.yTrackBar.Size = new System.Drawing.Size(107, 45);
+      this.yTrackBar.TabIndex = 10;
+      this.yTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.yTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // sizeComboBox
+      // 
+      this.sizeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeComboBox.FormattingEnabled = true;
+      this.sizeComboBox.Location = new System.Drawing.Point(329, 3);
+      this.sizeComboBox.Name = "sizeComboBox";
+      this.sizeComboBox.Size = new System.Drawing.Size(121, 21);
+      this.sizeComboBox.TabIndex = 14;
+      this.sizeComboBox.SelectedIndexChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
+      // 
+      // sizeLabel
+      // 
+      this.sizeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeLabel.AutoSize = true;
+      this.sizeLabel.Location = new System.Drawing.Point(259, 6);
+      this.sizeLabel.Name = "sizeLabel";
+      this.sizeLabel.Size = new System.Drawing.Size(64, 13);
+      this.sizeLabel.TabIndex = 15;
+      this.sizeLabel.Text = "Bubble size:";
+      // 
+      // invertCheckbox
+      // 
+      this.invertCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.invertCheckbox.AutoSize = true;
+      this.invertCheckbox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.invertCheckbox.Location = new System.Drawing.Point(326, 30);
+      this.invertCheckbox.Name = "invertCheckbox";
+      this.invertCheckbox.Size = new System.Drawing.Size(64, 17);
+      this.invertCheckbox.TabIndex = 16;
+      this.invertCheckbox.Text = "Inverse:";
+      this.invertCheckbox.UseVisualStyleBackColor = true;
+      this.invertCheckbox.CheckedChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
+      // 
+      // bubbleChartControl
+      // 
+      this.bubbleChartControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.bubbleChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.bubbleChartControl.Chart = null;
+      this.bubbleChartControl.Location = new System.Drawing.Point(3, 81);
+      this.bubbleChartControl.Name = "bubbleChartControl";
+      this.bubbleChartControl.ScaleOnResize = true;
+      this.bubbleChartControl.Size = new System.Drawing.Size(444, 304);
+      this.bubbleChartControl.TabIndex = 17;
+      // 
+      // BubbleChartView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.bubbleChartControl);
+      this.Controls.Add(this.invertCheckbox);
+      this.Controls.Add(this.sizeLabel);
+      this.Controls.Add(this.sizeComboBox);
+      this.Controls.Add(this.yJitterLabel);
+      this.Controls.Add(this.xJitterlabel);
+      this.Controls.Add(this.xTrackBar);
+      this.Controls.Add(this.xAxisLabel);
+      this.Controls.Add(this.xAxisComboBox);
+      this.Controls.Add(this.yAxisLabel);
+      this.Controls.Add(this.yAxisComboBox);
+      this.Controls.Add(this.yTrackBar);
+      this.Name = "BubbleChartView";
+      this.Size = new System.Drawing.Size(450, 459);
+      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label xAxisLabel;
+    private System.Windows.Forms.ComboBox xAxisComboBox;
+    private System.Windows.Forms.Label yAxisLabel;
+    private System.Windows.Forms.ComboBox yAxisComboBox;
+    private System.Windows.Forms.TrackBar yTrackBar;
+    private System.Windows.Forms.TrackBar xTrackBar;
+    private System.Windows.Forms.Label xJitterlabel;
+    private System.Windows.Forms.Label yJitterLabel;
+    private System.Windows.Forms.ComboBox sizeComboBox;
+    private System.Windows.Forms.Label sizeLabel;
+    private System.Windows.Forms.CheckBox invertCheckbox;
+    private BubbleChartControl bubbleChartControl;
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.cs	(revision 1287)
@@ -0,0 +1,72 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.Charting;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public class BubbleChartViewFactory : IResultsViewFactory {
+    #region IResultsViewFactory Members
+
+    public string Name {
+      get { return "Bubble chart"; }
+    }
+
+    public IControl CreateView(Results results) {
+      return new BubbleChartView(results);
+    }
+
+    #endregion
+  }
+
+  public partial class BubbleChartView : ViewBase {
+    private Results Results {
+      get { return (Results)Item; }
+      set { Item = value; }
+    }
+    private const string CONSTANT_SIZE = "<constant>";
+    private Label pleaseSelectAxisLabel = new Label();
+    public BubbleChartView(Results results) {
+      InitializeComponent();
+      Results = results;
+      bubbleChartControl.Chart = new BubbleChart(Results, 0, 0, 100, 100);
+      xAxisComboBox.Items.AddRange(Results.OrdinalVariables);
+      xAxisComboBox.Items.AddRange(Results.CategoricalVariables);
+      yAxisComboBox.Items.AddRange(Results.OrdinalVariables);
+      yAxisComboBox.Items.AddRange(Results.CategoricalVariables);
+      sizeComboBox.Items.Add(CONSTANT_SIZE);
+      sizeComboBox.Items.AddRange(Results.OrdinalVariables);
+      sizeComboBox.SelectedItem = sizeComboBox.Items[0];
+      yAxisComboBox.SelectedItem = yAxisComboBox.Items[0];
+      xAxisComboBox.SelectedItem = xAxisComboBox.Items[0];
+    }
+
+    private void axisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      if (xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
+      bubbleChartControl.Chart.ShowXvsY((string)xAxisComboBox.SelectedItem, (string)yAxisComboBox.SelectedItem);
+    }
+
+    private void jitterTrackBar_ValueChanged(object sender, EventArgs e) {
+      double xJitterFactor = xTrackBar.Value / 100.0;
+      double yJitterFactor = yTrackBar.Value / 100.0;
+      bubbleChartControl.Chart.SetJitter(xJitterFactor, yJitterFactor);
+      UpdateChart();
+    }
+
+    private void sizeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      bubbleChartControl.Chart.SetBubbleSizeDimension((string)sizeComboBox.SelectedItem, invertCheckbox.Checked);
+      UpdateChart();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChartView.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1287)
@@ -73,29 +73,18 @@
       <DependentUpon>BubbleChartControl.cs</DependentUpon>
     </Compile>
-    <Compile Include="Histogram.cs" />
-    <Compile Include="HistogramControl.cs">
+    <Compile Include="BubbleChartView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="HistogramControl.Designer.cs">
-      <DependentUpon>HistogramControl.cs</DependentUpon>
+    <Compile Include="BubbleChartView.Designer.cs">
+      <DependentUpon>BubbleChartView.cs</DependentUpon>
     </Compile>
-    <Compile Include="ModelView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ModelView.Designer.cs">
-      <DependentUpon>ModelView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Record.cs" />
     <Compile Include="HeuristicLabCedmaChartingPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ResultList.cs" />
-    <Compile Include="ResultListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ResultListView.Designer.cs">
-      <DependentUpon>ResultListView.cs</DependentUpon>
-    </Compile>
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.Core\HeuristicLab.CEDMA.Core.csproj">
+      <Project>{C27DDF6C-84DF-45EF-B82F-57A28DD51166}</Project>
+      <Name>HeuristicLab.CEDMA.Core</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
       <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
@@ -122,12 +111,4 @@
       <Name>HeuristicLab.Data</Name>
     </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification\HeuristicLab.GP.StructureIdentification.csproj">
-      <Project>{74223A32-C726-4978-BE78-37113A18373C}</Project>
-      <Name>HeuristicLab.GP.StructureIdentification</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
-      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
-      <Name>HeuristicLab.GP</Name>
-    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
       <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
@@ -146,17 +127,7 @@
     <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>
-    <EmbeddedResource Include="ResultListView.resx">
-      <DependentUpon>ResultListView.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="BubbleChartView.resx">
+      <DependentUpon>BubbleChartView.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: trunk/sources/HeuristicLab.CEDMA.Charting/Record.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/Record.cs	(revision 1286)
+++ 	(revision )
@@ -1,115 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Collections;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using System.Xml;
-using System.Runtime.Serialization;
-using System.IO;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.CEDMA.Charting {
-  public class Record {
-    public const string MAPE_TRAINING = "MAPE (training)";
-    public const string MAPE_VALIDATION = "MAPE (validation)";
-    public const string MAPE_TEST = "MAPE (test)";
-    public const string R2_TRAINING = "R2 (training)";
-    public const string R2_VALIDATION = "R2 (validation)";
-    public const string R2_TEST = "R2 (test)";
-    public const string TARGET_VARIABLE = "Target variable";
-    public const string TREE_SIZE = "Tree size";
-    public const string TREE_HEIGHT = "Tree height";
-    public const string SELECTIONPRESSURE = "Selection pressure";
-
-    public const string X_JITTER = "__X_JITTER";
-    public const string Y_JITTER = "__Y_JITTER";
-
-    private Dictionary<string, double> values = new Dictionary<string, double>();
-    private ResultList resultList;
-
-    private bool selected = false;
-    public bool Selected { get { return selected; } }
-
-    private string uri;
-    public string Uri { get { return uri; } }
-    public Record(ResultList resultList, string uri) {
-      this.uri = uri;
-      this.resultList = resultList;
-    }
-
-    public void Set(string name, double value) {
-      values.Add(name, value);
-    }
-
-    public double Get(string name) {
-      if(name == null || !values.ContainsKey(name)) return double.NaN;
-      return values[name];
-    }
-
-    public void ToggleSelected() {
-      selected = !selected;
-    }
-
-    internal string GetToolTipText() {
-      StringBuilder b = new StringBuilder();
-      foreach(KeyValuePair<string, double> v in values) {
-        if(v.Key != X_JITTER && v.Key != Y_JITTER) {
-          b.Append(v.Key).Append(" = ").Append(v.Value).AppendLine();
-        }
-      }
-      return b.ToString();
-    }
-
-    internal void OpenModel() {
-      resultList.OpenModel(this);
-    }
-
-    internal void OpenGeneratingAlgorithm() {
-      resultList.OpenAlgorithm(this);
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Charting/ResultList.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/ResultList.cs	(revision 1286)
+++ 	(revision )
@@ -1,208 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Collections;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using System.Xml;
-using System.Runtime.Serialization;
-using System.IO;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Logging;
-using HeuristicLab.Data;
-using HeuristicLab.DataAnalysis;
-using HeuristicLab.Charting.Data;
-using System.Drawing;
-using HeuristicLab.GP;
-
-namespace HeuristicLab.CEDMA.Charting {
-
-  public class RecordAddedEventArgs : EventArgs {
-    private Record record;
-    public Record Record { get { return record; } }
-    public RecordAddedEventArgs(Record r)
-      : base() {
-      this.record = r;
-    }
-  }
-
-  public class ResultList : ItemBase {
-    private const string cedmaNS = "http://www.heuristiclab.com/cedma/";
-    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 selectionPressurePredicate = new Entity(cedmaNS + "SelectionPressure");
-    private readonly Entity rawDataPredicate = new Entity(cedmaNS + "RawData");
-    private readonly Entity hasModelPredicate = new Entity(cedmaNS + "Model");
-    private readonly Entity generatedByPredicate = new Entity(cedmaNS + "GeneratedBy");
-    private readonly Entity anyEntity = new Entity(null);
-    private Dictionary<Record, Dataset> datasets;
-
-    private IStore store;
-    public IStore Store {
-      get { return store; }
-      set {
-        store = value;
-        Action reloadList = ReloadList;
-        reloadList.BeginInvoke(null, null);
-      }
-    }
-
-    private List<string> variableNames = new List<string>() { Record.TARGET_VARIABLE, Record.TREE_SIZE, Record.TREE_HEIGHT, Record.SELECTIONPRESSURE,
-    Record.MAPE_TRAINING, Record.MAPE_VALIDATION, Record.MAPE_TEST,
-    Record.R2_TRAINING, Record.R2_VALIDATION, Record.R2_TEST};
-    public string[] VariableNames {
-      get {
-        return variableNames.ToArray();
-      }
-    }
-
-    private Dictionary<Entity, string> predicateToVariableName;
-
-    public event EventHandler<RecordAddedEventArgs> OnRecordAdded;
-
-    private List<Record> records;
-    public List<Record> Records {
-      get {
-        List<Record> result = new List<Record>();
-        lock(records) {
-          result.AddRange(records);
-        }
-        return result;
-      }
-    }
-    private void ReloadList() {
-      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, selectionPressurePredicate,
-          trainingMAPEPredicate, validationMAPEPredicate, testMAPEPredicate,
-          trainingR2Predicate, validationR2Predicate, testR2Predicate },
-          new Resource[] { anyEntity })));
-
-      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);
-        }
-      }
-      FireChanged();
-    }
-
-    private void FireRecordAdded(Record r) {
-      if(OnRecordAdded != null) OnRecordAdded(this, new RecordAddedEventArgs(r));
-    }
-
-    public ResultList()
-      : base() {
-      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 ResultListView(this);
-    }
-
-    internal void OpenModel(Record record) {
-      IList<Statement> modelResults = store.Select(new Statement(new Entity(record.Uri), rawDataPredicate, 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(anyEntity, hasModelPredicate, new Entity(record.Uri)));
-        if(result.Count == 1) {
-          IList<Statement> datasetResult = store.Select(new Statement(result[0].Subject, rawDataPredicate, 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), generatedByPredicate, anyEntity));
-      if(generatedBy.Count == 1) {
-        IList<Statement> algoResult = store.Select(new Statement((Entity)generatedBy[0].Property, rawDataPredicate, 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());
-        }
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Charting/ResultListView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/ResultListView.Designer.cs	(revision 1286)
+++ 	(revision )
@@ -1,203 +1,0 @@
-﻿namespace HeuristicLab.CEDMA.Charting {
-  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.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: trunk/sources/HeuristicLab.CEDMA.Charting/ResultListView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/ResultListView.cs	(revision 1286)
+++ 	(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.Charting;
-
-namespace HeuristicLab.CEDMA.Charting {
-  public partial class ResultListView : ViewBase {
-    private ResultList results;
-    private const string FREQUENCY = "<Frequency>";
-    private const string CONSTANT_SIZE = "<constant>";
-    private BubbleChartControl bubbleChartControl;
-    private HistogramControl histogramControl;
-    private Label pleaseSelectAxisLabel = new Label();
-
-    public ResultListView(ResultList 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: trunk/sources/HeuristicLab.CEDMA.Charting/ResultListView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Charting/ResultListView.resx	(revision 1286)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/Agent.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Agent.cs	(revision 1286)
+++ 	(revision )
@@ -1,103 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class Agent : IAgent {
-    public IDatabase Database { get; set; }
-    public long Id { get; set; }
-    public string Name { get; set; }
-    public ProcessStatus Status { get; set; }
-    public bool Terminated { get; set; }
-    private OperatorGraph operatorGraph;
-
-    public IOperatorGraph OperatorGraph {
-      get { return operatorGraph; }
-    }
-
-    public Agent()
-      : base() {
-      operatorGraph = new OperatorGraph();
-    }
-
-    public Agent(IDatabase database, long id)
-      : this() {
-      Database = database;
-      Id = id;
-    }
-
-    public void Save() {
-      Database.UpdateAgent(Id, Name);
-      Database.UpdateAgent(Id, Status);
-      Database.UpdateAgent(Id, PersistenceManager.SaveToGZip(OperatorGraph));
-    }
-
-    public void Start() {
-      Status = ProcessStatus.Waiting;
-      Save();
-    }
-
-    public ICollection<IAgent> SubAgents {
-      get {
-        List<IAgent> agents = new List<IAgent>();
-        foreach(AgentEntry entry in Database.GetSubAgents(Id)) {
-          Agent newAgent = new Agent(Database, entry.Id);
-          newAgent.Name = entry.Name;
-          newAgent.Status = entry.Status;
-          agents.Add(newAgent);
-        }
-        return agents;
-      }
-    }
-
-    public ICollection<IResult> Results {
-      get {
-        List<IResult> results = new List<IResult>();
-        foreach(ResultEntry entry in Database.GetResults(Id)) {
-          Result result = new Result(Database, entry.Id);
-          result.Summary = entry.Summary;
-          result.Description = entry.Description;
-          results.Add(result);
-        }
-        return results;
-      }
-    }
-
-    public IView CreateView() {
-      if(OperatorGraph.Operators.Count == 0) {
-        byte[] rawData = Database.GetAgentRawData(Id);
-        IOperatorGraph opGraph = (IOperatorGraph)PersistenceManager.RestoreFromGZip(rawData);
-        foreach(IOperator op in opGraph.Operators) OperatorGraph.AddOperator(op);
-        OperatorGraph.InitialOperator = opGraph.InitialOperator;
-        OperatorLinkPatcher.LinkDatabase(OperatorGraph, Database);
-      }
-      return new AgentView(this);
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentList.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentList.cs	(revision 1286)
+++ 	(revision )
@@ -1,96 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.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 AgentList : ItemBase, IAgentList {
-    private List<IAgent> agentList;
-    private IDatabase database;
-    public IDatabase Database {
-      get { return database; }
-      set {
-        database = value;
-        Action reload = ReloadList;
-        lock(agentList) {
-          agentList.Clear();
-        }
-        reload.BeginInvoke(null, null);
-      }
-    }
-
-    private void ReloadList() {
-      foreach(AgentEntry a in database.GetAgents()) {
-        Agent newAgent = new Agent(Database, a.Id);
-        newAgent.Name = a.Name;
-        newAgent.Status = a.Status;
-        lock(agentList) {
-          agentList.Add(newAgent);
-        }
-        FireChanged();
-      }
-    }
-
-    public AgentList()
-      : base() {
-      agentList = new List<IAgent>();
-    }
-
-    public void CreateAgent() {
-      Agent agent = new Agent();
-      agent.Name = DateTime.Now.ToString();
-      agent.Status = ProcessStatus.Unknown;
-      agent.Database = database;
-      long id = database.InsertAgent(null, agent.Name, PersistenceManager.SaveToGZip(agent.OperatorGraph));
-      agent.Id = id;
-      lock(agentList) {
-        agentList.Add(agent);
-      }
-      FireChanged();
-    }
-
-    public IEnumerator<IAgent> GetEnumerator() {
-      List<IAgent> agents = new List<IAgent>();
-      lock(agentList) {
-        agents.AddRange(agentList);
-      }
-      return agents.GetEnumerator();
-    }
-
-    IEnumerator IEnumerable.GetEnumerator() {
-      return GetEnumerator();
-    }
-
-    public override IView CreateView() {
-      return new AgentListView(this);
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentListView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentListView.Designer.cs	(revision 1286)
+++ 	(revision )
@@ -1,181 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.CEDMA.Core {
-  partial class AgentListView {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if(disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.agentsGroupBox = new System.Windows.Forms.GroupBox();
-      this.agentTreeView = new System.Windows.Forms.TreeView();
-      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.addButton = new System.Windows.Forms.Button();
-      this.refreshButton = new System.Windows.Forms.Button();
-      this.entryContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
-      this.exportAllResultsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.agentsGroupBox.SuspendLayout();
-      this.entryContextMenuStrip.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // splitContainer1
-      // 
-      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
-      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer1.Name = "splitContainer1";
-      // 
-      // splitContainer1.Panel1
-      // 
-      this.splitContainer1.Panel1.Controls.Add(this.agentsGroupBox);
-      // 
-      // splitContainer1.Panel2
-      // 
-      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
-      this.splitContainer1.Size = new System.Drawing.Size(276, 155);
-      this.splitContainer1.SplitterDistance = 135;
-      this.splitContainer1.TabIndex = 0;
-      // 
-      // agentsGroupBox
-      // 
-      this.agentsGroupBox.Controls.Add(this.agentTreeView);
-      this.agentsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.agentsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.agentsGroupBox.Name = "agentsGroupBox";
-      this.agentsGroupBox.Size = new System.Drawing.Size(135, 155);
-      this.agentsGroupBox.TabIndex = 0;
-      this.agentsGroupBox.TabStop = false;
-      this.agentsGroupBox.Text = "&Agents";
-      // 
-      // agentTreeView
-      // 
-      this.agentTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.agentTreeView.Location = new System.Drawing.Point(3, 16);
-      this.agentTreeView.Name = "agentTreeView";
-      this.agentTreeView.Size = new System.Drawing.Size(129, 136);
-      this.agentTreeView.TabIndex = 0;
-      this.agentTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.agentTreeView_BeforeExpand);
-      this.agentTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.agentTreeView_AfterSelect);
-      // 
-      // detailsGroupBox
-      // 
-      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.detailsGroupBox.Name = "detailsGroupBox";
-      this.detailsGroupBox.Size = new System.Drawing.Size(137, 155);
-      this.detailsGroupBox.TabIndex = 0;
-      this.detailsGroupBox.TabStop = false;
-      this.detailsGroupBox.Text = "&Details";
-      // 
-      // addButton
-      // 
-      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addButton.Location = new System.Drawing.Point(0, 161);
-      this.addButton.Name = "addButton";
-      this.addButton.Size = new System.Drawing.Size(75, 23);
-      this.addButton.TabIndex = 1;
-      this.addButton.Text = "&Add...";
-      this.addButton.UseVisualStyleBackColor = true;
-      this.addButton.Click += new System.EventHandler(this.addButton_Click);
-      // 
-      // refreshButton
-      // 
-      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.refreshButton.Location = new System.Drawing.Point(81, 161);
-      this.refreshButton.Name = "refreshButton";
-      this.refreshButton.Size = new System.Drawing.Size(75, 23);
-      this.refreshButton.TabIndex = 2;
-      this.refreshButton.Text = "&Refresh";
-      this.refreshButton.UseVisualStyleBackColor = true;
-      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
-      // 
-      // entryContextMenuStrip
-      // 
-      this.entryContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.exportAllResultsToolStripMenuItem});
-      this.entryContextMenuStrip.Name = "entryContextMenuStrip";
-      this.entryContextMenuStrip.Size = new System.Drawing.Size(166, 26);
-      // 
-      // exportAllResultsToolStripMenuItem
-      // 
-      this.exportAllResultsToolStripMenuItem.Name = "exportAllResultsToolStripMenuItem";
-      this.exportAllResultsToolStripMenuItem.Size = new System.Drawing.Size(165, 22);
-      this.exportAllResultsToolStripMenuItem.Text = "Export all results";
-      this.exportAllResultsToolStripMenuItem.Click += new System.EventHandler(this.exportAllResultsToolStripMenuItem_Click);
-      // 
-      // AgentListView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.Controls.Add(this.refreshButton);
-      this.Controls.Add(this.addButton);
-      this.Controls.Add(this.splitContainer1);
-      this.Name = "AgentListView";
-      this.Size = new System.Drawing.Size(276, 184);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      this.splitContainer1.ResumeLayout(false);
-      this.agentsGroupBox.ResumeLayout(false);
-      this.entryContextMenuStrip.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.GroupBox agentsGroupBox;
-    private System.Windows.Forms.GroupBox detailsGroupBox;
-    private System.Windows.Forms.Button addButton;
-    private TreeView agentTreeView;
-    private Button refreshButton;
-    private ContextMenuStrip entryContextMenuStrip;
-    private ToolStripMenuItem exportAllResultsToolStripMenuItem;
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentListView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentListView.cs	(revision 1286)
+++ 	(revision )
@@ -1,141 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.CEDMA.Core {
-  public partial class AgentListView : ViewBase {
-    public IAgentList AgentList {
-      get { return (IAgentList)Item; }
-      set { base.Item = value; }
-    }
-
-    public AgentListView() {
-      InitializeComponent();
-      Caption = "Agent View";
-    }
-    public AgentListView(IAgentList agentList)
-      : this() {
-      AgentList = agentList;
-      agentList.Changed += new EventHandler(agentList_Changed);
-    }
-
-    void agentList_Changed(object sender, EventArgs e) {
-      UpdateControls();
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      detailsGroupBox.Controls.Clear();
-      detailsGroupBox.Enabled = false;
-      if(AgentList == null) {
-        Caption = "Agents View";
-        agentTreeView.Enabled = false;
-      } else {
-        agentTreeView.Enabled = true;
-        agentTreeView.Nodes.Clear();
-        foreach(IAgent agent in AgentList) {
-          TreeNode node = new TreeNode();
-          node.Text = agent.Name;
-          node.Tag = agent;
-          node.Nodes.Add("dummy");
-          node.ContextMenuStrip = entryContextMenuStrip;
-          agentTreeView.Nodes.Add(node);
-        }
-      }
-    }
-
-    #region Button Events
-    private void addButton_Click(object sender, EventArgs e) {
-      AgentList.CreateAgent();
-    }
-    #endregion
-
-    private void agentTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
-      e.Node.Nodes.Clear();
-      if(e.Node.Tag is IAgent) {
-        IAgent agent = (IAgent)e.Node.Tag;
-        foreach(IAgent subAgent in agent.SubAgents) {
-          TreeNode node = new TreeNode();
-          node.Text = subAgent.Name;
-          node.Tag = subAgent;
-          node.ContextMenuStrip = entryContextMenuStrip;
-          node.Nodes.Add("dummy");
-          e.Node.Nodes.Add(node);
-        }
-        foreach(IResult result in agent.Results) {
-          TreeNode node = new TreeNode();
-          node.Text = result.Summary;
-          node.Tag = result;
-          node.Nodes.Add("dummy");
-          e.Node.Nodes.Add(node);
-        }
-      } else if(e.Node.Tag is IResult) {
-        IResult result = (IResult)e.Node.Tag;
-        foreach(IResult subResult in result.SubResults) {
-          TreeNode node = new TreeNode();
-          node.Text = subResult.Summary;
-          node.Tag = subResult;
-          node.Nodes.Add("dummy");
-          e.Node.Nodes.Add(node);
-        }
-      }
-    }
-
-    private void agentTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      if(detailsGroupBox.Controls.Count > 0)
-        detailsGroupBox.Controls[0].Dispose();
-      detailsGroupBox.Controls.Clear();
-      detailsGroupBox.Enabled = false;
-      if(agentTreeView.SelectedNode != null) {
-        IViewable viewable = (IViewable)agentTreeView.SelectedNode.Tag;
-        Control control = (Control)viewable.CreateView();
-        detailsGroupBox.Controls.Add(control);
-        control.Dock = DockStyle.Fill;
-        detailsGroupBox.Enabled = true;
-      }
-    }
-
-    private void refreshButton_Click(object sender, EventArgs e) {
-      UpdateControls();
-    }
-
-    private void exportAllResultsToolStripMenuItem_Click(object sender, EventArgs e) {
-      TreeNode node = agentTreeView.SelectedNode;
-      Agent agent = (Agent)node.Tag;
-      ResultExporter exporter = new ResultExporter();
-      ResultTable table = new ResultTable();
-      exporter.Export(agent, table);
-
-      using(System.IO.FileStream s = new System.IO.FileStream("exported-results.txt", System.IO.FileMode.Create)) {
-        table.Write(s);
-      }
-    }
-  }
-}
-
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentListView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentListView.resx	(revision 1286)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="entryContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentView.Designer.cs	(revision 1286)
+++ 	(revision )
@@ -1,105 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.CEDMA.Core {
-  partial class AgentView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if(disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.editorGroupBox = new System.Windows.Forms.GroupBox();
-      this.saveButton = new System.Windows.Forms.Button();
-      this.activateButton = new System.Windows.Forms.Button();
-      this.SuspendLayout();
-      // 
-      // editorGroupBox
-      // 
-      this.editorGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.editorGroupBox.Location = new System.Drawing.Point(0, 3);
-      this.editorGroupBox.Name = "editorGroupBox";
-      this.editorGroupBox.Size = new System.Drawing.Size(274, 119);
-      this.editorGroupBox.TabIndex = 0;
-      this.editorGroupBox.TabStop = false;
-      this.editorGroupBox.Text = "&Editor:";
-      // 
-      // saveButton
-      // 
-      this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.saveButton.Location = new System.Drawing.Point(4, 128);
-      this.saveButton.Name = "saveButton";
-      this.saveButton.Size = new System.Drawing.Size(75, 23);
-      this.saveButton.TabIndex = 1;
-      this.saveButton.Text = "&Save";
-      this.saveButton.UseVisualStyleBackColor = true;
-      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
-      // 
-      // activateButton
-      // 
-      this.activateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.activateButton.Location = new System.Drawing.Point(85, 128);
-      this.activateButton.Name = "activateButton";
-      this.activateButton.Size = new System.Drawing.Size(75, 23);
-      this.activateButton.TabIndex = 2;
-      this.activateButton.Text = "&Start";
-      this.activateButton.UseVisualStyleBackColor = true;
-      this.activateButton.Click += new System.EventHandler(this.activateButton_Click);
-      // 
-      // AgentView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.activateButton);
-      this.Controls.Add(this.saveButton);
-      this.Controls.Add(this.editorGroupBox);
-      this.Name = "AgentView";
-      this.Size = new System.Drawing.Size(274, 154);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.GroupBox editorGroupBox;
-    private System.Windows.Forms.Button saveButton;
-    private System.Windows.Forms.Button activateButton;
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentView.cs	(revision 1286)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Core {
-  public partial class AgentView : ViewBase {
-    private Agent agent;
-    public Agent Agent {
-      get { return agent; }
-      set { agent = value; }
-    }
-
-    public AgentView() {
-      InitializeComponent();
-      Caption = "Agent";
-    }
-    public AgentView(Agent agent)
-      : this() {
-      Agent = agent;
-      UpdateControls();
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      editorGroupBox.Controls.Clear();
-      editorGroupBox.Enabled = false;
-      if(Agent != null && Agent.OperatorGraph != null) {
-        Control editor = (Control)Agent.OperatorGraph.CreateView();
-        if(editor != null) {
-          editorGroupBox.Controls.Add(editor);
-          editor.Dock = DockStyle.Fill;
-          editorGroupBox.Enabled = true;
-        }
-
-        if(Agent.Status == ProcessStatus.Unknown) activateButton.Enabled = true;
-        else activateButton.Enabled = false;
-      }
-    }
-
-    private void saveButton_Click(object sender, EventArgs e) {
-      Agent.Save();
-    }
-
-    private void activateButton_Click(object sender, EventArgs e) {
-      Agent.Start();
-      activateButton.Enabled = false;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/AgentView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/AgentView.resx	(revision 1286)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/Console.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Console.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Core/Console.cs	(revision 1287)
@@ -29,13 +29,10 @@
 using System.ServiceModel.Description;
 using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.CEDMA.Charting;
 
 namespace HeuristicLab.CEDMA.Core {
   public class Console : ItemBase, IEditable {
-    private AgentList agentList;
-    private ResultList resultsList;
-    private DatabaseOperatorLibrary operatorLibary;
-    private ChannelFactory<IDatabase> factory;
-    private IDatabase database;
+    private DataSetList dataSetList;
+    private ChannelFactory<IStore> factory;
+    private IStore store;
     private string serverUri;
     public string ServerUri {
@@ -43,21 +40,11 @@
     }
 
-    public IAgentList AgentList {
-      get { return agentList; }
-    }
-
-    public ResultList ResultsList {
-      get { return resultsList; }
-    }
-
-    public IOperatorLibrary OperatorLibrary {
-      get { return operatorLibary; }
+    public DataSetList DataSetList {
+      get { return dataSetList; }
     }
 
     public Console()
       : base() {
-      agentList = new AgentList();
-      resultsList = new ResultList();
-      operatorLibary = new DatabaseOperatorLibrary();
+      dataSetList = new DataSetList();
     }
 
@@ -88,16 +75,11 @@
     private void ResetConnection() {
       NetTcpBinding binding = new NetTcpBinding();
-      binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
-      binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
-      binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
-      binding.Security.Mode = SecurityMode.None;
-      factory = new ChannelFactory<IDatabase>(binding);
-      database = factory.CreateChannel(new EndpointAddress(serverUri));
-      agentList.Database = database;
-      operatorLibary.Database = database;
-
-      ChannelFactory<IStore> storeFactory = new ChannelFactory<IStore>(binding);
-      IStore store = storeFactory.CreateChannel(new EndpointAddress(serverUri + "/RdfStore"));
-      resultsList.Store = store;
+      binding.ReceiveTimeout = new TimeSpan(1, 0, 0);
+      binding.MaxReceivedMessageSize = 1000000000; // 100Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 1000000000; // also 100M chars
+      binding.ReaderQuotas.MaxArrayLength = 1000000000; // also 100M elements;
+      factory = new ChannelFactory<IStore>(binding);
+      store = factory.CreateChannel(new EndpointAddress(serverUri));
+      dataSetList.Store = store;
     }
     #endregion
Index: trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 1287)
@@ -36,10 +36,5 @@
     private System.Windows.Forms.Label uriLabel;
     private Button connectButton;
-    private Button openOpLibButton;
-    private Label label1;
-    private Label resultsLabel;
-    private Button openResultsButton;
-    private Button openAgentsButton;
-    private Label agentsLabel;
+    private Panel serverPanel;
     private Console console;
 
@@ -47,16 +42,13 @@
       InitializeComponent();
       this.console = console;
+      serverPanel.Enabled = false;
     }
 
+    #region autogenerated code
     private void InitializeComponent() {
       this.uriTextBox = new System.Windows.Forms.TextBox();
       this.uriLabel = new System.Windows.Forms.Label();
       this.connectButton = new System.Windows.Forms.Button();
-      this.openOpLibButton = new System.Windows.Forms.Button();
-      this.label1 = new System.Windows.Forms.Label();
-      this.resultsLabel = new System.Windows.Forms.Label();
-      this.openResultsButton = new System.Windows.Forms.Button();
-      this.openAgentsButton = new System.Windows.Forms.Button();
-      this.agentsLabel = new System.Windows.Forms.Label();
+      this.serverPanel = new System.Windows.Forms.Panel();
       this.SuspendLayout();
       // 
@@ -87,73 +79,18 @@
       this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
       // 
-      // openOpLibButton
+      // serverPanel
       // 
-      this.openOpLibButton.Enabled = false;
-      this.openOpLibButton.Location = new System.Drawing.Point(94, 85);
-      this.openOpLibButton.Name = "openOpLibButton";
-      this.openOpLibButton.Size = new System.Drawing.Size(75, 23);
-      this.openOpLibButton.TabIndex = 7;
-      this.openOpLibButton.Text = "&Open";
-      this.openOpLibButton.UseVisualStyleBackColor = true;
-      this.openOpLibButton.Click += new System.EventHandler(this.opLibButton_Click);
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(3, 90);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(85, 13);
-      this.label1.TabIndex = 8;
-      this.label1.Text = "Operator Library:";
-      // 
-      // resultsLabel
-      // 
-      this.resultsLabel.AutoSize = true;
-      this.resultsLabel.Location = new System.Drawing.Point(43, 61);
-      this.resultsLabel.Name = "resultsLabel";
-      this.resultsLabel.Size = new System.Drawing.Size(45, 13);
-      this.resultsLabel.TabIndex = 9;
-      this.resultsLabel.Text = "Results:";
-      // 
-      // openResultsButton
-      // 
-      this.openResultsButton.Enabled = false;
-      this.openResultsButton.Location = new System.Drawing.Point(94, 56);
-      this.openResultsButton.Name = "openResultsButton";
-      this.openResultsButton.Size = new System.Drawing.Size(75, 23);
-      this.openResultsButton.TabIndex = 10;
-      this.openResultsButton.Text = "&Open";
-      this.openResultsButton.UseVisualStyleBackColor = true;
-      this.openResultsButton.Click += new System.EventHandler(this.openChartButton_Click);
-      // 
-      // openAgentsButton
-      // 
-      this.openAgentsButton.Enabled = false;
-      this.openAgentsButton.Location = new System.Drawing.Point(94, 27);
-      this.openAgentsButton.Name = "openAgentsButton";
-      this.openAgentsButton.Size = new System.Drawing.Size(75, 23);
-      this.openAgentsButton.TabIndex = 12;
-      this.openAgentsButton.Text = "&Open";
-      this.openAgentsButton.UseVisualStyleBackColor = true;
-      this.openAgentsButton.Click += new System.EventHandler(this.openAgentsButton_Click);
-      // 
-      // agentsLabel
-      // 
-      this.agentsLabel.AutoSize = true;
-      this.agentsLabel.Location = new System.Drawing.Point(45, 32);
-      this.agentsLabel.Name = "agentsLabel";
-      this.agentsLabel.Size = new System.Drawing.Size(43, 13);
-      this.agentsLabel.TabIndex = 11;
-      this.agentsLabel.Text = "Agents:";
+      this.serverPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.serverPanel.Location = new System.Drawing.Point(3, 29);
+      this.serverPanel.Name = "serverPanel";
+      this.serverPanel.Size = new System.Drawing.Size(439, 157);
+      this.serverPanel.TabIndex = 4;
       // 
       // ConsoleEditor
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.Controls.Add(this.openAgentsButton);
-      this.Controls.Add(this.agentsLabel);
-      this.Controls.Add(this.openResultsButton);
-      this.Controls.Add(this.resultsLabel);
-      this.Controls.Add(this.label1);
-      this.Controls.Add(this.openOpLibButton);
+      this.Controls.Add(this.serverPanel);
       this.Controls.Add(this.connectButton);
       this.Controls.Add(this.uriLabel);
@@ -166,32 +103,19 @@
     }
 
+    #endregion
+
     private void connectButton_Click(object sender, EventArgs e) {
       try {
         console.Connect(uriTextBox.Text);
         connectButton.Enabled = false;
-        openOpLibButton.Enabled = true;
-        openAgentsButton.Enabled = true;
-        openResultsButton.Enabled = true;
+        serverPanel.Enabled = true;
+        serverPanel.Controls.Clear();
+        Control dataSetListView = (Control)console.DataSetList.CreateView();
+        dataSetListView.Dock = DockStyle.Fill;
+        serverPanel.Controls.Add(dataSetListView);
       } catch(CommunicationException ex) {
         MessageBox.Show("Exception while trying to connect to " + uriTextBox.Text + "\n" + ex.Message);
       }
     }
-
-    private void opLibButton_Click(object sender, EventArgs e) {
-      IOperatorLibrary opLib = console.OperatorLibrary;
-      if(opLib != null) {
-        IView view = opLib.CreateView();
-        if(view != null)
-          PluginManager.ControlManager.ShowControl(view);
-      }
-    }
-
-    private void openChartButton_Click(object sender, EventArgs e) {
-      PluginManager.ControlManager.ShowControl(console.ResultsList.CreateView());
-    }
-
-    private void openAgentsButton_Click(object sender, EventArgs e) {
-      PluginManager.ControlManager.ShowControl(console.AgentList.CreateView());
-    }
   }
 }
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSet.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSet.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSet.cs	(revision 1287)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class DataSet : IViewable {
+    public IStore Store { get; set; }
+
+    private Guid guid;
+    public Guid Guid {
+      get { return guid; }
+    }
+
+    private string name;
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    private Problem problem;
+    public Problem Problem {
+      get {
+        // lazy loading of problem from DB
+        if (problem == null) {
+          //var serializedDataVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("SerializedData");
+          //var persistedData = Store.Query(
+          //  new Statement[] { new Statement(new Entity(Ontology.CedmaNameSpace + Guid), Ontology.PredicateSerializedData, serializedDataVar)});
+          var persistedData = Store.Query(
+            "<" + Ontology.CedmaNameSpace + Guid + "> <" + Ontology.PredicateSerializedData.Uri + "> ?SerializedData .");
+          if (persistedData.Count() == 1) {
+            Literal persistedLiteral = (Literal)persistedData.First().Get("SerializedData");
+            this.problem = (Problem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String((string)persistedLiteral.Value));
+          } else
+            this.problem = new Problem(); // no entry in the DB => create a new problem
+        }
+        return problem;
+      }
+    }
+
+    public DataSet()
+      : base() {
+      guid = Guid.NewGuid();
+      name = "Data set";
+    }
+
+    public DataSet(IStore store, Entity dataSetEntity)
+      : this() {
+      Store = store;
+      guid = new Guid(dataSetEntity.Uri.Remove(0, Ontology.CedmaNameSpace.Length));
+      name = guid.ToString();
+    }
+
+    public void Activate() {
+      Entity myEntity = new Entity(Ontology.CedmaNameSpace + Guid);
+      Store.Add(new Statement(myEntity, Ontology.PredicateInstanceOf, Ontology.TypeDataSet));
+      Store.Add(new Statement(myEntity, Ontology.PredicateSerializedData, new Literal(Convert.ToBase64String(PersistenceManager.SaveToGZip(problem)))));
+      Store.Add(new Statement(myEntity, Ontology.PredicateName, new Literal(name)));
+    }
+
+    public IView CreateView() {
+      return new DataSetView(this);
+    }
+
+    internal Results GetResults() {
+      Results results = new Results(Store);
+      results.FilterDataSet(new Entity(Ontology.CedmaNameSpace + Guid));
+      return results;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetList.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetList.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetList.cs	(revision 1287)
@@ -0,0 +1,95 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class DataSetList : ItemBase, IEnumerable<DataSet> {
+    private List<DataSet> dataSetList;
+    private IStore store;
+    public IStore Store {
+      get { return store; }
+      set {
+        store = value;
+        Action reload = ReloadList;
+        lock (dataSetList) {
+          dataSetList.Clear();
+        }
+        reload.BeginInvoke(null, null);
+      }
+    }
+
+    public DataSetList()
+      : base() {
+      dataSetList = new List<DataSet>();
+    }
+
+    public override IView CreateView() {
+      return new DataSetListView(this);
+    }
+
+    private void ReloadList() {
+      HeuristicLab.CEDMA.DB.Interfaces.Variable dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
+      HeuristicLab.CEDMA.DB.Interfaces.Variable dataSetNameVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("Name");
+      var bindings = store.Query(
+        "?DataSet <"+Ontology.PredicateInstanceOf.Uri+"> <"+Ontology.TypeDataSet.Uri+"> ." + Environment.NewLine +
+        "?DataSet <"+Ontology.PredicateName.Uri+"> ?Name .");
+      //  new Statement[] { 
+      //    new Statement(dataSetVar, Ontology.PredicateInstanceOf, Ontology.TypeDataSet),
+      //    new Statement(dataSetVar, Ontology.PredicateName, dataSetNameVar)
+      //});
+      foreach (var binding in bindings) {
+        DataSet d = new DataSet(store, (Entity)binding.Get("DataSet"));
+        d.Name = (string)((Literal)binding.Get("Name")).Value;
+        lock (dataSetList) {
+          dataSetList.Add(d);
+        }
+        FireChanged();
+      }
+    }
+
+    public IEnumerator<DataSet> GetEnumerator() {
+      List<DataSet> dataSets = new List<DataSet>();
+      lock (dataSets) {
+        dataSets.AddRange(dataSetList);
+      }
+      return dataSets.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    public void Add(DataSet dataSet) {
+      dataSetList.Add(dataSet);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.Designer.cs	(revision 1287)
@@ -0,0 +1,162 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Core {
+  partial class DataSetListView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.dataSetsGroupBox = new System.Windows.Forms.GroupBox();
+      this.dataSetsListView = new System.Windows.Forms.ListView();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.dataSetsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.refreshButton.Location = new System.Drawing.Point(81, 161);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(75, 23);
+      this.refreshButton.TabIndex = 2;
+      this.refreshButton.Text = "&Refresh";
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addButton.Location = new System.Drawing.Point(0, 161);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(75, 23);
+      this.addButton.TabIndex = 1;
+      this.addButton.Text = "&Add...";
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.dataSetsGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(276, 155);
+      this.splitContainer1.SplitterDistance = 135;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // dataSetsGroupBox
+      // 
+      this.dataSetsGroupBox.Controls.Add(this.dataSetsListView);
+      this.dataSetsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataSetsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.dataSetsGroupBox.Name = "dataSetsGroupBox";
+      this.dataSetsGroupBox.Size = new System.Drawing.Size(135, 155);
+      this.dataSetsGroupBox.TabIndex = 0;
+      this.dataSetsGroupBox.TabStop = false;
+      this.dataSetsGroupBox.Text = "&Data Sets";
+      // 
+      // dataSetsListView
+      // 
+      this.dataSetsListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataSetsListView.Location = new System.Drawing.Point(3, 16);
+      this.dataSetsListView.MultiSelect = false;
+      this.dataSetsListView.Name = "dataSetsListView";
+      this.dataSetsListView.Size = new System.Drawing.Size(129, 136);
+      this.dataSetsListView.TabIndex = 0;
+      this.dataSetsListView.UseCompatibleStateImageBehavior = false;
+      this.dataSetsListView.View = System.Windows.Forms.View.List;
+      this.dataSetsListView.SelectedIndexChanged += new System.EventHandler(this.dataSetsListView_SelectedIndexChanged);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(137, 155);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "&Details";
+      // 
+      // DataSetListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.addButton);
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "DataSetListView";
+      this.Size = new System.Drawing.Size(276, 184);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.dataSetsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox dataSetsGroupBox;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.Button addButton;
+    private Button refreshButton;
+    private ListView dataSetsListView;
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.cs	(revision 1287)
@@ -0,0 +1,100 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class DataSetListView : ViewBase {
+    public DataSetList DataSetList {
+      get { return (DataSetList)Item; }
+      set { base.Item = value; }
+    }
+
+    public DataSetListView() {
+      InitializeComponent();
+      Caption = "DataSet View";
+    }
+    public DataSetListView(DataSetList dataSetList)
+      : this() {
+      DataSetList = dataSetList;
+      dataSetList.Changed += new EventHandler(dataSetList_Changed);
+    }
+
+    void dataSetList_Changed(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((EventHandler)dataSetList_Changed, sender, e);
+      else UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      if(DataSetList == null) {
+        Caption = "Data Sets View";
+        dataSetsListView.Enabled = false;
+      } else {
+        dataSetsListView.Enabled = true;
+        dataSetsListView.Items.Clear();
+        foreach(DataSet dataSet in DataSetList) {
+          ListViewItem node = new ListViewItem();
+          node.Text = dataSet.Name;
+          node.Tag = dataSet;
+          dataSetsListView.Items.Add(node);
+        }
+      }
+    }
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      DataSet dataSet = new DataSet();
+      dataSet.Store = DataSetList.Store;
+      DataSetList.Add(dataSet);
+      UpdateControls();
+    }
+    private void dataSetsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(dataSetsListView.SelectedItems.Count > 0) {
+        if(detailsGroupBox.Controls.Count > 0)
+          detailsGroupBox.Controls[0].Dispose();
+        detailsGroupBox.Controls.Clear();
+        detailsGroupBox.Enabled = false;
+        IViewable viewable = (IViewable)dataSetsListView.SelectedItems[0].Tag;
+        Control control = (Control)viewable.CreateView();
+        detailsGroupBox.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+    #endregion
+
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      UpdateControls();
+    }
+  }
+}
+
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetListView.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.Designer.cs	(revision 1287)
@@ -0,0 +1,129 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.CEDMA.Core {
+  partial class DataSetView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.editorGroupBox = new System.Windows.Forms.GroupBox();
+      this.activateButton = new System.Windows.Forms.Button();
+      this.resultsButton = new System.Windows.Forms.Button();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.viewComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // editorGroupBox
+      // 
+      this.editorGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.editorGroupBox.Location = new System.Drawing.Point(0, 3);
+      this.editorGroupBox.Name = "editorGroupBox";
+      this.editorGroupBox.Size = new System.Drawing.Size(381, 218);
+      this.editorGroupBox.TabIndex = 0;
+      this.editorGroupBox.TabStop = false;
+      this.editorGroupBox.Text = "&Editor:";
+      // 
+      // activateButton
+      // 
+      this.activateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.activateButton.Location = new System.Drawing.Point(0, 227);
+      this.activateButton.Name = "activateButton";
+      this.activateButton.Size = new System.Drawing.Size(75, 23);
+      this.activateButton.TabIndex = 2;
+      this.activateButton.Text = "&Activate";
+      this.activateButton.UseVisualStyleBackColor = true;
+      this.activateButton.Click += new System.EventHandler(this.activateButton_Click);
+      // 
+      // resultsButton
+      // 
+      this.resultsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resultsButton.Location = new System.Drawing.Point(130, 254);
+      this.resultsButton.Name = "resultsButton";
+      this.resultsButton.Size = new System.Drawing.Size(86, 23);
+      this.resultsButton.TabIndex = 3;
+      this.resultsButton.Text = "Show results";
+      this.resultsButton.UseVisualStyleBackColor = true;
+      this.resultsButton.Click += new System.EventHandler(this.resultsButton_Click);
+      // 
+      // progressBar
+      // 
+      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.progressBar.Location = new System.Drawing.Point(222, 254);
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(156, 23);
+      this.progressBar.TabIndex = 4;
+      // 
+      // viewComboBox
+      // 
+      this.viewComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.viewComboBox.FormattingEnabled = true;
+      this.viewComboBox.Location = new System.Drawing.Point(3, 256);
+      this.viewComboBox.Name = "viewComboBox";
+      this.viewComboBox.Size = new System.Drawing.Size(121, 21);
+      this.viewComboBox.TabIndex = 5;
+      // 
+      // DataSetView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.viewComboBox);
+      this.Controls.Add(this.progressBar);
+      this.Controls.Add(this.resultsButton);
+      this.Controls.Add(this.activateButton);
+      this.Controls.Add(this.editorGroupBox);
+      this.Name = "DataSetView";
+      this.Size = new System.Drawing.Size(381, 280);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox editorGroupBox;
+    private System.Windows.Forms.Button activateButton;
+    private System.Windows.Forms.Button resultsButton;
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.ComboBox viewComboBox;
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.cs	(revision 1287)
@@ -0,0 +1,115 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class DataSetView : ViewBase {
+    private DataSet dataSet;
+    public DataSet DataSet {
+      get { return dataSet; }
+      set { dataSet = value; }
+    }
+    private Results results;
+    public DataSetView() {
+      InitializeComponent();
+      Caption = "Data Set";
+    }
+    public DataSetView(DataSet dataSet)
+      : this() {
+      DataSet = dataSet;
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      editorGroupBox.Controls.Clear();
+      Control problemControl = (Control)DataSet.Problem.CreateView();
+      problemControl.Dock = DockStyle.Fill;
+      editorGroupBox.Controls.Add(problemControl);
+      PopulateViewComboBox();
+      resultsButton.Enabled = viewComboBox.SelectedItem != null;
+    }
+
+    private void PopulateViewComboBox() {
+      DiscoveryService service = new DiscoveryService();
+      IResultsViewFactory[] factories = service.GetInstances<IResultsViewFactory>();
+      viewComboBox.DataSource = factories;
+      viewComboBox.ValueMember = "Name";
+    }
+
+    private void activateButton_Click(object sender, EventArgs e) {
+      DataSet.Activate();
+      activateButton.Enabled = false;
+    }
+
+    private void resultsButton_Click(object sender, EventArgs e) {
+      if (results == null)
+        ReloadResults();
+      try {
+        IResultsViewFactory factory = (IResultsViewFactory)viewComboBox.SelectedItem;
+        BackgroundWorker worker = new BackgroundWorker();
+        worker.WorkerReportsProgress = true;
+        worker.WorkerSupportsCancellation = true;
+        worker.ProgressChanged += delegate(object progressChangedSender, ProgressChangedEventArgs progressChangedArgs) {
+          progressBar.Value = progressChangedArgs.ProgressPercentage;
+        };
+        worker.DoWork += delegate(object doWorkSender, DoWorkEventArgs doWorkArgs) {
+          int n = results.GetEntries().Count();
+          int i = 0;
+          // preload list 
+          foreach (var entry in results.GetEntries()) {
+            i++;
+            if((((i*100) / n) % 10) == 0) worker.ReportProgress((i * 100) / n);
+          }
+          worker.ReportProgress(100);
+        };
+        resultsButton.Enabled = false;
+        worker.RunWorkerAsync();
+        worker.RunWorkerCompleted += delegate(object completedSender, RunWorkerCompletedEventArgs compledArgs) {
+          resultsButton.Enabled = true;
+          progressBar.Value = 0;
+          IControl control = factory.CreateView(results);
+          PluginManager.ControlManager.ShowControl(control);
+        };
+      }
+      catch (Exception ex) {
+        string text = "Couldn't load selected view: " + viewComboBox.SelectedItem + "\n" + ex.Message;
+        MessageBox.Show(text, "Unable to create view", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    private void ReloadResults() {
+      results = dataSet.GetResults();
+    }
+  }
+}
+
Index: trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/DataSetView.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs	(revision 1286)
+++ 	(revision )
@@ -1,119 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class DatabaseOperatorLibrary : ItemBase, IOperatorLibrary {
-
-    private OperatorGroup group;
-    public IOperatorGroup Group {
-      get { return group; }
-    }
-
-    private IDatabase database;
-    public IDatabase Database {
-      get { return database; }
-      set { this.database = value; }
-    }
-
-    private Dictionary<IOperator, long> knownOperators;
-
-    public DatabaseOperatorLibrary()
-      : base() {
-      group = new OperatorGroup();
-      knownOperators = new Dictionary<IOperator, long>();
-    }
-
-    public void Save() {
-      Dictionary<IOperator, long> newKnownOperators = new Dictionary<IOperator, long>();
-      foreach(IOperator op in group.Operators) {
-        if(knownOperators.ContainsKey(op)) {
-          // update
-          long id = knownOperators[op];
-          Database.UpdateOperator(id, op.Name, PersistenceManager.SaveToGZip(op));
-          knownOperators.Remove(op);
-          newKnownOperators.Add(op, id);
-        } else {
-          // create new
-          long id = Database.InsertOperator(op.Name, PersistenceManager.SaveToGZip(op));
-          newKnownOperators.Add(op, id);
-        }
-      }
-      // delete operators from the table that are not present in the group anymore (remaining entries)
-      foreach(long id in knownOperators.Values) {
-        Database.DeleteOperator(id);
-      }
-
-      knownOperators = newKnownOperators;
-    }
-
-    public void Restore() {
-      foreach(IOperator op in knownOperators.Keys) {
-        group.RemoveOperator(op);
-      }
-      knownOperators.Clear();
-      if(database == null) return;
-      foreach(OperatorEntry e in Database.GetOperators()) {
-        IOperator op = (IOperator)PersistenceManager.RestoreFromGZip(e.RawData);
-        knownOperators.Add(op, e.Id);
-        group.AddOperator(op);
-      }
-
-      // set the DB source for each operator
-      foreach(IOperator op in group.Operators) {
-        OperatorLinkPatcher.LinkDatabase(op, Database);
-      }
-    }
-
-    private IOperator FindOperator(long id) {
-      foreach(KeyValuePair<IOperator, long> p in knownOperators) if(p.Value == id) return p.Key;
-      return null;
-    }
-
-    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      throw new NotSupportedException();
-    }
-
-    public override void Populate(System.Xml.XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      throw new NotSupportedException();
-    }
-
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      throw new NotSupportedException();
-    }
-
-    public override IView CreateView() {
-      Restore();
-      return new DatabaseOperatorLibraryView(this);
-    }
-
-    internal long GetId(IOperator op) {
-      return knownOperators[op];
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.Designer.cs	(revision 1286)
+++ 	(revision )
@@ -1,161 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.CEDMA.Core {
-  partial class DatabaseOperatorLibraryView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.operatorsGroupBox = new System.Windows.Forms.GroupBox();
-      this.operatorsTreeView = new System.Windows.Forms.TreeView();
-      this.removeButton = new System.Windows.Forms.Button();
-      this.addOperatorButton = new System.Windows.Forms.Button();
-      this.saveButton = new System.Windows.Forms.Button();
-      this.refreshButton = new System.Windows.Forms.Button();
-      this.operatorsGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // operatorsGroupBox
-      // 
-      this.operatorsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.operatorsGroupBox.Controls.Add(this.operatorsTreeView);
-      this.operatorsGroupBox.Enabled = false;
-      this.operatorsGroupBox.Location = new System.Drawing.Point(0, 32);
-      this.operatorsGroupBox.Name = "operatorsGroupBox";
-      this.operatorsGroupBox.Size = new System.Drawing.Size(522, 334);
-      this.operatorsGroupBox.TabIndex = 2;
-      this.operatorsGroupBox.TabStop = false;
-      this.operatorsGroupBox.Text = "&Operators";
-      // 
-      // operatorsTreeView
-      // 
-      this.operatorsTreeView.AllowDrop = true;
-      this.operatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorsTreeView.HideSelection = false;
-      this.operatorsTreeView.LabelEdit = true;
-      this.operatorsTreeView.Location = new System.Drawing.Point(3, 16);
-      this.operatorsTreeView.Name = "operatorsTreeView";
-      this.operatorsTreeView.ShowNodeToolTips = true;
-      this.operatorsTreeView.Size = new System.Drawing.Size(516, 315);
-      this.operatorsTreeView.TabIndex = 0;
-      this.operatorsTreeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.operatorsTreeView_AfterLabelEdit);
-      this.operatorsTreeView.DoubleClick += new System.EventHandler(this.operatorsTreeView_DoubleClick);
-      this.operatorsTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragDrop);
-      this.operatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
-      this.operatorsTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.operatorsTreeView_MouseDown);
-      this.operatorsTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragEnter);
-      this.operatorsTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.operatorsTreeView_KeyDown);
-      this.operatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorsTreeView_ItemDrag);
-      this.operatorsTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragOver);
-      // 
-      // removeButton
-      // 
-      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeButton.Enabled = false;
-      this.removeButton.Location = new System.Drawing.Point(113, 372);
-      this.removeButton.Name = "removeButton";
-      this.removeButton.Size = new System.Drawing.Size(104, 23);
-      this.removeButton.TabIndex = 4;
-      this.removeButton.Text = "&Remove";
-      this.removeButton.UseVisualStyleBackColor = true;
-      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
-      // 
-      // addOperatorButton
-      // 
-      this.addOperatorButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addOperatorButton.Enabled = false;
-      this.addOperatorButton.Location = new System.Drawing.Point(3, 372);
-      this.addOperatorButton.Name = "addOperatorButton";
-      this.addOperatorButton.Size = new System.Drawing.Size(104, 23);
-      this.addOperatorButton.TabIndex = 3;
-      this.addOperatorButton.Text = "Add &Operator...";
-      this.addOperatorButton.UseVisualStyleBackColor = true;
-      this.addOperatorButton.Click += new System.EventHandler(this.addOperatorButton_Click);
-      // 
-      // saveButton
-      // 
-      this.saveButton.Location = new System.Drawing.Point(6, 3);
-      this.saveButton.Name = "saveButton";
-      this.saveButton.Size = new System.Drawing.Size(104, 23);
-      this.saveButton.TabIndex = 0;
-      this.saveButton.Text = "&Upload";
-      this.saveButton.UseVisualStyleBackColor = true;
-      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
-      // 
-      // refreshButton
-      // 
-      this.refreshButton.Location = new System.Drawing.Point(113, 3);
-      this.refreshButton.Name = "refreshButton";
-      this.refreshButton.Size = new System.Drawing.Size(104, 23);
-      this.refreshButton.TabIndex = 1;
-      this.refreshButton.Text = "R&efresh";
-      this.refreshButton.UseVisualStyleBackColor = true;
-      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
-      // 
-      // DatabaseOperatorLibraryView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.refreshButton);
-      this.Controls.Add(this.saveButton);
-      this.Controls.Add(this.operatorsGroupBox);
-      this.Controls.Add(this.addOperatorButton);
-      this.Controls.Add(this.removeButton);
-      this.Name = "DatabaseOperatorLibraryView";
-      this.Size = new System.Drawing.Size(522, 395);
-      this.operatorsGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.GroupBox operatorsGroupBox;
-    private System.Windows.Forms.TreeView operatorsTreeView;
-    private System.Windows.Forms.Button removeButton;
-    private System.Windows.Forms.Button addOperatorButton;
-    private System.Windows.Forms.Button saveButton;
-    private System.Windows.Forms.Button refreshButton;
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.cs	(revision 1286)
+++ 	(revision )
@@ -1,257 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.CEDMA.Core {
-  public partial class DatabaseOperatorLibraryView : ViewBase {
-    private ChooseOperatorDialog chooseOperatorDialog;
-
-    public IOperatorLibrary OperatorLibrary {
-      get { return (IOperatorLibrary)Item; }
-      set { base.Item = value; }
-    }
-
-    public DatabaseOperatorLibraryView() {
-      InitializeComponent();
-      operatorsTreeView.TreeViewNodeSorter = new NodeSorter();
-      Caption = "Operator Library";
-    }
-    public DatabaseOperatorLibraryView(DatabaseOperatorLibrary operatorLibrary)
-      : this() {
-      OperatorLibrary = operatorLibrary;
-    }
-
-    private class NodeSorter : IComparer {
-      public int Compare(object x, object y) {
-        TreeNode tx = x as TreeNode;
-        TreeNode ty = y as TreeNode;
-
-        int result = string.Compare(tx.Text, ty.Text);
-        if(result == 0)
-          result = tx.Index.CompareTo(ty.Index);
-        return result;
-      }
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      operatorsTreeView.Nodes.Clear();
-      addOperatorButton.Enabled = false;
-      removeButton.Enabled = false;
-      if(OperatorLibrary == null) {
-        Caption = "Operator Library";
-        operatorsGroupBox.Enabled = false;
-      } else {
-        Caption = OperatorLibrary.Group.Name + " (" + OperatorLibrary.GetType().Name + ")";
-        operatorsGroupBox.Enabled = true;
-        operatorsTreeView.Nodes.Add(CreateTreeNode(OperatorLibrary.Group));
-        operatorsTreeView.Sort();
-      }
-    }
-
-    private TreeNode CreateTreeNode(IOperatorGroup group) {
-      TreeNode node = new TreeNode();
-      node.Text = group.Name;
-      node.ForeColor = Color.LightGray;
-      node.Tag = group;
-
-      foreach(IOperator op in group.Operators)
-        node.Nodes.Add(CreateTreeNode(op));
-      foreach(IOperatorGroup subGroup in group.SubGroups)
-        node.Nodes.Add(CreateTreeNode(subGroup));
-      return node;
-    }
-    private TreeNode CreateTreeNode(IOperator op) {
-      TreeNode node = new TreeNode();
-      node.Text = op.Name;
-      node.ToolTipText = op.GetType().Name;
-      node.Tag = op;
-      return node;
-    }
-    private void RemoveTreeNode(TreeNode node) {
-      if(node.Tag is IOperatorGroup) {
-        IOperatorGroup group = node.Tag as IOperatorGroup;
-        IOperatorGroup parent = node.Parent.Tag as IOperatorGroup;
-        parent.RemoveSubGroup(group);
-      } else if(node.Tag is IOperator) {
-        IOperator op = node.Tag as IOperator;
-        IOperatorGroup group = node.Parent.Tag as IOperatorGroup;
-        group.RemoveOperator(op);
-      }
-      node.Remove();
-      EnableDisableButtons();
-    }
-
-    private void EnableDisableButtons() {
-      addOperatorButton.Enabled = false;
-      removeButton.Enabled = false;
-      operatorsTreeView.Focus();
-
-      if(operatorsTreeView.SelectedNode != null) {
-        if(operatorsTreeView.SelectedNode.Parent != null)
-          removeButton.Enabled = true;
-        if(operatorsTreeView.SelectedNode.Tag is IOperatorGroup) {
-          addOperatorButton.Enabled = true;
-        }
-      }
-    }
-
-    #region TreeView Events
-    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      EnableDisableButtons();
-    }
-    private void operatorsTreeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
-      e.CancelEdit = false;
-
-      string name = e.Label;
-      if(name != null) {
-        if(e.Node.Tag is IOperatorGroup)
-          ((IOperatorGroup)e.Node.Tag).Name = name;
-        else if(e.Node.Tag is IOperator)
-          ((IOperator)e.Node.Tag).Name = name;
-      }
-    }
-    private void operatorsTreeView_DoubleClick(object sender, EventArgs e) {
-      if(operatorsTreeView.SelectedNode != null) {
-        IOperator op = operatorsTreeView.SelectedNode.Tag as IOperator;
-        if(op != null) {
-          IView view = op.CreateView();
-          if(view != null)
-            PluginManager.ControlManager.ShowControl(view);
-        }
-      }
-    }
-    #endregion
-
-    #region Button Events
-    private void addOperatorButton_Click(object sender, EventArgs e) {
-      if(chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
-      if(chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
-        TreeNode node = operatorsTreeView.SelectedNode;
-        IOperatorGroup group = node.Tag as IOperatorGroup;
-        group.AddOperator(chooseOperatorDialog.Operator);
-        node.Nodes.Add(CreateTreeNode(chooseOperatorDialog.Operator));
-        operatorsTreeView.Sort();
-        EnableDisableButtons();
-      }
-    }
-    private void removeButton_Click(object sender, EventArgs e) {
-      TreeNode node = operatorsTreeView.SelectedNode;
-      RemoveTreeNode(node);
-    }
-    #endregion
-
-    #region Key Events
-    private void operatorsTreeView_KeyDown(object sender, KeyEventArgs e) {
-      TreeNode node = operatorsTreeView.SelectedNode;
-      if((e.KeyCode == Keys.Delete) && (node != null) && (node.Parent != null))
-        RemoveTreeNode(operatorsTreeView.SelectedNode);
-      if((e.KeyCode == Keys.F2) && (node != null))
-        node.BeginEdit();
-    }
-    #endregion
-
-
-    #region Mouse Events
-    private void operatorsTreeView_MouseDown(object sender, MouseEventArgs e) {
-      if(e.Button != MouseButtons.Right) return;
-      TreeNode clickedNode = operatorsTreeView.GetNodeAt(e.X, e.Y);
-      if(clickedNode != null) {
-        operatorsTreeView.SelectedNode = clickedNode;
-        operatorsTreeView.Refresh();
-      }
-    }
-    #endregion
-
-    #region Drag and Drop Events
-    private void operatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
-      TreeNode node = (TreeNode)e.Item;
-      IOperator op = node.Tag as IOperator;
-      if(op != null) {
-        long opId = ((DatabaseOperatorLibrary)OperatorLibrary).GetId(op);
-        OperatorLink link = new OperatorLink(opId, op);
-        DataObject data = new DataObject();
-        data.SetData("IOperator", link);
-        data.SetData("DragSource", operatorsTreeView);
-        DoDragDrop(data, DragDropEffects.Copy);
-      }
-    }
-    private void operatorsTreeView_DragEnter(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if(e.Data.GetDataPresent("IOperator")) {
-        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
-        TreeNode node = operatorsTreeView.GetNodeAt(p);
-        if((node != null) && (node.Tag is IOperatorGroup))
-          e.Effect = DragDropEffects.Copy;
-      }
-    }
-    private void operatorsTreeView_DragOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if(e.Data.GetDataPresent("IOperator")) {
-        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
-        TreeNode node = operatorsTreeView.GetNodeAt(p);
-        if((node != null) && (node.Tag is IOperatorGroup))
-          e.Effect = DragDropEffects.Copy;
-      }
-    }
-    private void operatorsTreeView_DragDrop(object sender, DragEventArgs e) {
-      if(e.Effect != DragDropEffects.None) {
-        if(e.Data.GetDataPresent("IOperator")) {
-          IOperator op = (IOperator)e.Data.GetData("IOperator");
-          Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
-          TreeNode node = operatorsTreeView.GetNodeAt(p);
-          if(node != null) {
-            op = (IOperator)op.Clone();
-
-            while(op.SubOperators.Count > 0)
-              op.RemoveSubOperator(0);
-
-            IOperatorGroup group = (IOperatorGroup)node.Tag;
-            group.AddOperator(op);
-            node.Nodes.Add(CreateTreeNode(op));
-            operatorsTreeView.Sort();
-            EnableDisableButtons();
-          }
-        }
-      }
-    }
-    #endregion
-
-    private void saveButton_Click(object sender, EventArgs e) {
-      ((DatabaseOperatorLibrary)OperatorLibrary).Save();
-    }
-
-    private void refreshButton_Click(object sender, EventArgs e) {
-      ((DatabaseOperatorLibrary)OperatorLibrary).Restore();
-      UpdateControls();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.resx	(revision 1286)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1287)
@@ -72,40 +72,40 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Agent.cs" />
-    <Compile Include="AgentList.cs" />
+    <Compile Include="IResultsViewFactory.cs" />
+    <Compile Include="ResultsEntry.cs" />
+    <Compile Include="TableResultsView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TableResultsView.Designer.cs">
+      <DependentUpon>TableResultsView.cs</DependentUpon>
+    </Compile>
     <Compile Include="Console.cs" />
     <Compile Include="ConsoleEditor.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="ResultTable.cs" />
-    <Compile Include="ResultExporter.cs" />
-    <Compile Include="DatabaseOperatorLibrary.cs" />
-    <Compile Include="DatabaseOperatorLibraryView.cs">
+    <Compile Include="Problem.cs" />
+    <Compile Include="DataSet.cs" />
+    <Compile Include="DataSetList.cs" />
+    <Compile Include="DataSetListView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="DatabaseOperatorLibraryView.Designer.cs">
-      <DependentUpon>DatabaseOperatorLibraryView.cs</DependentUpon>
+    <Compile Include="DataSetListView.Designer.cs">
+      <DependentUpon>DataSetListView.cs</DependentUpon>
     </Compile>
-    <Compile Include="OperatorLink.cs" />
-    <Compile Include="OperatorLinkPatcher.cs" />
-    <Compile Include="Result.cs" />
-    <Compile Include="IResult.cs" />
-    <Compile Include="HeuristicLabCedmaCorePlugin.cs" />
-    <Compile Include="IAgent.cs" />
-    <Compile Include="IAgentList.cs" />
-    <Compile Include="IDatabaseItem.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="AgentListView.cs">
+    <Compile Include="DataSetView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="AgentListView.Designer.cs">
-      <DependentUpon>AgentListView.cs</DependentUpon>
+    <Compile Include="DataSetView.Designer.cs">
+      <DependentUpon>DataSetView.cs</DependentUpon>
     </Compile>
-    <Compile Include="AgentView.cs">
+    <Compile Include="HeuristicLabCedmaCorePlugin.cs" />
+    <Compile Include="ProblemView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="AgentView.Designer.cs">
-      <DependentUpon>AgentView.cs</DependentUpon>
+    <Compile Include="ProblemView.Designer.cs">
+      <DependentUpon>ProblemView.cs</DependentUpon>
     </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Results.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -113,8 +113,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>
@@ -124,4 +120,12 @@
       <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
       <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
@@ -135,11 +139,6 @@
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="AgentListView.resx">
-      <DependentUpon>AgentListView.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="AgentView.resx">
-      <DependentUpon>AgentView.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="TableResultsView.resx">
+      <DependentUpon>TableResultsView.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="ConsoleEditor.resx">
@@ -147,7 +146,12 @@
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="DatabaseOperatorLibraryView.resx">
-      <DependentUpon>DatabaseOperatorLibraryView.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="DataSetListView.resx">
+      <DependentUpon>DataSetListView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DataSetView.resx">
+      <DependentUpon>DataSetView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProblemView.resx">
+      <DependentUpon>ProblemView.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: trunk/sources/HeuristicLab.CEDMA.Core/IAgent.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/IAgent.cs	(revision 1286)
+++ 	(revision )
@@ -1,40 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Core {
-  public interface IAgent : IDatabaseItem, IViewable {
-    string Name { get; }
-    ProcessStatus Status { get; }
-    IOperatorGraph OperatorGraph { get; }
-    ICollection<IAgent> SubAgents { get; }
-    ICollection<IResult> Results { get; }
-    bool Terminated { get; }
-    void Save();
-    void Start();
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/IAgentList.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/IAgentList.cs	(revision 1286)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.CEDMA.Core {
-  public interface IAgentList : IItem, IEnumerable<IAgent> {
-    void CreateAgent();
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/IDatabaseItem.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/IDatabaseItem.cs	(revision 1286)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Core {
-  public interface IDatabaseItem {
-    IDatabase Database { get; set; }
-    long Id { get; set; }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/IResult.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/IResult.cs	(revision 1286)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Core {
-  public interface IResult : IDatabaseItem, IViewable {
-    IItem Item { get; }
-    string Summary { get; }
-    string Description { get; }
-    ICollection<IResult> SubResults { get; }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/IResultsViewFactory.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/IResultsViewFactory.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/IResultsViewFactory.cs	(revision 1287)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IResultsViewFactory {
+    string Name { get; }
+    IControl CreateView(Results results);
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/OperatorLink.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/OperatorLink.cs	(revision 1286)
+++ 	(revision )
@@ -1,98 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class OperatorLink : OperatorBase {
-    private long id;
-    public long Id {
-      get { return id; }
-    }
-
-    public IDatabase Database { get; set; }
-
-    private IOperator myOperator;
-    public IOperator Operator {
-      get { return myOperator; }
-      set { myOperator = value; }
-    }
-
-    public OperatorLink() : base() { } // for cloning and persistence
-
-    public OperatorLink(long id, IOperator op)
-      : base() {
-      this.id = id;
-      this.myOperator = op;
-      Name = myOperator.Name;
-    }
-
-    public override void Abort() {
-      throw new NotSupportedException();
-    }
-
-    public override IOperation Apply(IScope scope) {
-      throw new NotSupportedException();
-    }
-
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      OperatorLink clone = (OperatorLink)base.Clone(clonedObjects);
-      clone.id = id;
-      clone.myOperator = Operator;
-      return clone;
-    }
-
-    public override IView CreateView() {
-      if(Operator == null) {
-        if(Database == null) return null;
-        OperatorEntry targetEntry = Database.GetOperator(Id);
-        IOperator target = (IOperator)PersistenceManager.RestoreFromGZip(targetEntry.RawData);
-        OperatorLinkPatcher.LinkDatabase(target, Database);
-        Operator = target;
-      }
-      return myOperator.CreateView();
-    }
-
-    public override IOperation Execute(IScope scope) {
-      throw new NotSupportedException();
-    }
-
-    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-      XmlAttribute idAttr = document.CreateAttribute("OperatorId");
-      idAttr.Value = id.ToString();
-      node.Attributes.Append(idAttr);
-      return node;
-    }
-
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      id = long.Parse(node.Attributes["OperatorId"].Value);
-      base.Populate(node, restoredObjects);
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/OperatorLinkPatcher.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/OperatorLinkPatcher.cs	(revision 1286)
+++ 	(revision )
@@ -1,58 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
-using System.IO;
-using System.IO.Compression;
-using HeuristicLab.Core;
-using HeuristicLab.Operators;
-using HeuristicLab.CEDMA.DB.Interfaces;
-
-namespace HeuristicLab.CEDMA.Core {
-  public static class OperatorLinkPatcher {
-    public static void LinkDatabase(IOperatorGraph opGraph, IDatabase database) {
-      foreach(IOperator op in opGraph.Operators) {
-        LinkDatabase(op, database);
-      }
-    }
-
-    public static void LinkDatabase(IOperator op, IDatabase database) {
-      if(op is OperatorLink) {
-        OperatorLink link = op as OperatorLink;
-        link.Database = database;
-      } else if(op is CombinedOperator) {
-        LinkDatabase(((CombinedOperator)op).OperatorGraph, database);
-      }
-      // also patch operator links contained (indirectly) in variables
-      foreach(VariableInfo varInfo in op.VariableInfos) {
-        IVariable var = op.GetVariable(varInfo.ActualName);
-        if(var != null && var.Value is IOperatorGraph) {
-          LinkDatabase((IOperatorGraph)var.Value, database);
-        } else if(var != null && var.Value is IOperator) {
-          LinkDatabase((IOperator)var.Value, database);
-        }
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/Problem.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Problem.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/Problem.cs	(revision 1287)
@@ -0,0 +1,221 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+
+  public enum LearningTask {
+    Classification,
+    Regression,
+    TimeSeries,
+    Clustering
+  }
+
+  /// <summary>
+  /// Problem describes the data mining task.
+  /// Contains the actual data and meta-data:
+  ///  * which variables should be modelled 
+  ///  * regression, time-series or classification problem
+  /// </summary>
+  public class Problem : ItemBase {
+    private string name;
+    public string Name {
+      get { return name; }
+    }
+    private HeuristicLab.DataAnalysis.Dataset dataset;
+    public HeuristicLab.DataAnalysis.Dataset DataSet {
+      get { return dataset; }
+    }
+
+    private int trainingSamplesStart;
+    public int TrainingSamplesStart {
+      get { return trainingSamplesStart; }
+      set { trainingSamplesStart = value; }
+    }
+
+    private int trainingSamplesEnd;
+    public int TrainingSamplesEnd {
+      get { return trainingSamplesEnd; }
+      set { trainingSamplesEnd = value; }
+    }
+
+    private int validationSamplesStart;
+    public int ValidationSamplesStart {
+      get { return validationSamplesStart; }
+      set { validationSamplesStart = value; }
+    }
+
+    private int validationSamplesEnd;
+    public int ValidationSamplesEnd {
+      get { return validationSamplesEnd; }
+      set { validationSamplesEnd = value; }
+    }
+
+    private int testSamplesStart;
+    public int TestSamplesStart {
+      get { return testSamplesStart; }
+      set { testSamplesStart = value; }
+    }
+
+    private int testSamplesEnd;
+    public int TestSamplesEnd {
+      get { return testSamplesEnd; }
+      set { testSamplesEnd = value; }
+    }
+
+    private List<int> allowedInputVariables;
+    public List<int> AllowedInputVariables {
+      get { return allowedInputVariables; }
+    }
+
+    private List<int> allowedTargetVariables;
+    public List<int> AllowedTargetVariables {
+      get { return allowedTargetVariables; }
+    }
+
+    private bool autoRegressive;
+    public bool AutoRegressive {
+      get { return autoRegressive; }
+      set { autoRegressive = value; }
+    }
+
+    private int minTimeOffset;
+    public int MinTimeOffset {
+      get { return minTimeOffset; }
+      set { minTimeOffset = value; }
+    }
+
+    private int maxTimeOffset;
+    public int MaxTimeOffset {
+      get { return maxTimeOffset; }
+      set { maxTimeOffset = value; }
+    }
+
+    private LearningTask learningTask;
+    public LearningTask LearningTask {
+      get { return learningTask; }
+      set { learningTask = value; }
+    }
+
+    public Problem()
+      : base() {
+      dataset = new DataAnalysis.Dataset();
+      allowedInputVariables = new List<int>();
+      allowedTargetVariables = new List<int>();
+    }
+
+
+    public string GetVariableName(int index) {
+      return dataset.GetVariableName(index);
+    }
+
+    public override IView CreateView() {
+      return new ProblemView(this);
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("DataSet", dataset, document, persistedObjects));
+      XmlAttribute trainingSamplesStartAttr = document.CreateAttribute("TrainingSamplesStart");
+      trainingSamplesStartAttr.Value = TrainingSamplesStart.ToString();
+      XmlAttribute trainingSamplesEndAttr = document.CreateAttribute("TrainingSamplesEnd");
+      trainingSamplesEndAttr.Value = TrainingSamplesEnd.ToString();
+      XmlAttribute validationSamplesStartAttr = document.CreateAttribute("ValidationSamplesStart");
+      validationSamplesStartAttr.Value = ValidationSamplesStart.ToString();
+      XmlAttribute validationSamplesEndAttr = document.CreateAttribute("ValidationSamplesEnd");
+      validationSamplesEndAttr.Value = ValidationSamplesEnd.ToString();
+      XmlAttribute testSamplesStartAttr = document.CreateAttribute("TestSamplesStart");
+      testSamplesStartAttr.Value = TestSamplesStart.ToString();
+      XmlAttribute testSamplesEndAttr = document.CreateAttribute("TestSamplesEnd");
+      testSamplesEndAttr.Value = TestSamplesEnd.ToString();
+      XmlAttribute learningTaskAttr = document.CreateAttribute("LearningTask");
+      learningTaskAttr.Value = LearningTask.ToString();
+      XmlAttribute autoRegressiveAttr = document.CreateAttribute("AutoRegressive");
+      autoRegressiveAttr.Value = AutoRegressive.ToString();
+      XmlAttribute minTimeOffsetAttr = document.CreateAttribute("MinTimeOffset");
+      minTimeOffsetAttr.Value = MinTimeOffset.ToString();
+      XmlAttribute maxTimeOffsetAttr = document.CreateAttribute("MaxTimeOffset");
+      maxTimeOffsetAttr.Value = MaxTimeOffset.ToString();
+
+      node.Attributes.Append(trainingSamplesStartAttr);
+      node.Attributes.Append(trainingSamplesEndAttr);
+      node.Attributes.Append(validationSamplesStartAttr);
+      node.Attributes.Append(validationSamplesEndAttr);
+      node.Attributes.Append(testSamplesStartAttr);
+      node.Attributes.Append(testSamplesEndAttr);
+      node.Attributes.Append(learningTaskAttr);
+      node.Attributes.Append(autoRegressiveAttr);
+      node.Attributes.Append(minTimeOffsetAttr);
+      node.Attributes.Append(maxTimeOffsetAttr);
+
+      XmlElement targetVariablesElement = document.CreateElement("AllowedTargetVariables");
+      targetVariablesElement.InnerText = SemiColonSeparatedList(AllowedTargetVariables);
+      XmlElement inputVariablesElement = document.CreateElement("AllowedInputVariables");
+      inputVariablesElement.InnerText = SemiColonSeparatedList(AllowedInputVariables);
+      node.AppendChild(targetVariablesElement);
+      node.AppendChild(inputVariablesElement);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      dataset = (HeuristicLab.DataAnalysis.Dataset)PersistenceManager.Restore(node.SelectSingleNode("DataSet"), restoredObjects);
+      TrainingSamplesStart = int.Parse(node.Attributes["TrainingSamplesStart"].Value);
+      TrainingSamplesEnd = int.Parse(node.Attributes["TrainingSamplesEnd"].Value);
+      ValidationSamplesStart = int.Parse(node.Attributes["ValidationSamplesStart"].Value);
+      ValidationSamplesEnd = int.Parse(node.Attributes["ValidationSamplesEnd"].Value);
+      TestSamplesStart = int.Parse(node.Attributes["TestSamplesStart"].Value);
+      TestSamplesEnd = int.Parse(node.Attributes["TestSamplesEnd"].Value);
+      LearningTask = (LearningTask)Enum.Parse(typeof(LearningTask), node.Attributes["LearningTask"].Value);
+      AutoRegressive = bool.Parse(node.Attributes["AutoRegressive"].Value);
+      if (node.Attributes["MinTimeOffset"] != null)
+        MinTimeOffset = XmlConvert.ToInt32(node.Attributes["MinTimeOffset"].Value);
+      else MinTimeOffset = 0;
+      if (node.Attributes["MaxTimeOffset"] != null)
+        MaxTimeOffset = XmlConvert.ToInt32(node.Attributes["MaxTimeOffset"].Value);
+      else MaxTimeOffset = 0;
+
+      allowedTargetVariables.Clear();
+      foreach (string tok in node.SelectSingleNode("AllowedTargetVariables").InnerText.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
+        allowedTargetVariables.Add(int.Parse(tok));
+      allowedInputVariables.Clear();
+      foreach (string tok in node.SelectSingleNode("AllowedInputVariables").InnerText.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
+        allowedInputVariables.Add(int.Parse(tok));
+    }
+
+    private string SemiColonSeparatedList(List<int> xs) {
+      StringBuilder b = new StringBuilder();
+      foreach (int x in xs) {
+        b = b.Append(x).Append(";");
+      }
+      if (xs.Count > 0) b.Remove(b.Length - 1, 1); // remove last ';'
+      return b.ToString();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.Designer.cs	(revision 1287)
@@ -0,0 +1,423 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+namespace HeuristicLab.CEDMA.Core {
+  partial class ProblemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.importButton = new System.Windows.Forms.Button();
+      this.trainingSamplesStartTextBox = new System.Windows.Forms.TextBox();
+      this.trainingLabel = new System.Windows.Forms.Label();
+      this.trainingSamplesEndTextBox = new System.Windows.Forms.TextBox();
+      this.validationSamplesEndTextBox = new System.Windows.Forms.TextBox();
+      this.validationSamplesStartTextBox = new System.Windows.Forms.TextBox();
+      this.validationLabel = new System.Windows.Forms.Label();
+      this.testSamplesEndTextBox = new System.Windows.Forms.TextBox();
+      this.testSamplesStartTextBox = new System.Windows.Forms.TextBox();
+      this.testLabel = new System.Windows.Forms.Label();
+      this.targetsListBox = new System.Windows.Forms.CheckedListBox();
+      this.inputsListBox = new System.Windows.Forms.CheckedListBox();
+      this.autoregressiveCheckBox = new System.Windows.Forms.CheckBox();
+      this.targetsGroupBox = new System.Windows.Forms.GroupBox();
+      this.inputsGroupBox = new System.Windows.Forms.GroupBox();
+      this.partitioningGroupBox = new System.Windows.Forms.GroupBox();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.classificationRadioButton = new System.Windows.Forms.RadioButton();
+      this.regressionRadioButton = new System.Windows.Forms.RadioButton();
+      this.timeSeriesRadioButton = new System.Windows.Forms.RadioButton();
+      this.minTimeOffsetLabel = new System.Windows.Forms.Label();
+      this.minTimeOffsetTextBox = new System.Windows.Forms.TextBox();
+      this.learningTaskGroupBox = new System.Windows.Forms.GroupBox();
+      this.autoregressiveLabel = new System.Windows.Forms.Label();
+      this.maxTimeOffsetLabel = new System.Windows.Forms.Label();
+      this.maxTimeOffsetTextBox = new System.Windows.Forms.TextBox();
+      this.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
+      this.targetsGroupBox.SuspendLayout();
+      this.inputsGroupBox.SuspendLayout();
+      this.partitioningGroupBox.SuspendLayout();
+      this.learningTaskGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // importButton
+      // 
+      this.importButton.Location = new System.Drawing.Point(3, 3);
+      this.importButton.Name = "importButton";
+      this.importButton.Size = new System.Drawing.Size(75, 23);
+      this.importButton.TabIndex = 0;
+      this.importButton.Text = "Import";
+      this.importButton.UseVisualStyleBackColor = true;
+      this.importButton.Click += new System.EventHandler(this.importButton_Click);
+      // 
+      // trainingSamplesStartTextBox
+      // 
+      this.trainingSamplesStartTextBox.Location = new System.Drawing.Point(119, 17);
+      this.trainingSamplesStartTextBox.Name = "trainingSamplesStartTextBox";
+      this.trainingSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
+      this.trainingSamplesStartTextBox.TabIndex = 4;
+      this.trainingSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.trainingSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // trainingLabel
+      // 
+      this.trainingLabel.AutoSize = true;
+      this.trainingLabel.Location = new System.Drawing.Point(13, 20);
+      this.trainingLabel.Name = "trainingLabel";
+      this.trainingLabel.Size = new System.Drawing.Size(89, 13);
+      this.trainingLabel.TabIndex = 3;
+      this.trainingLabel.Text = "Training samples:";
+      // 
+      // trainingSamplesEndTextBox
+      // 
+      this.trainingSamplesEndTextBox.Location = new System.Drawing.Point(221, 17);
+      this.trainingSamplesEndTextBox.Name = "trainingSamplesEndTextBox";
+      this.trainingSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
+      this.trainingSamplesEndTextBox.TabIndex = 10;
+      this.trainingSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.trainingSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // validationSamplesEndTextBox
+      // 
+      this.validationSamplesEndTextBox.Location = new System.Drawing.Point(221, 43);
+      this.validationSamplesEndTextBox.Name = "validationSamplesEndTextBox";
+      this.validationSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
+      this.validationSamplesEndTextBox.TabIndex = 13;
+      this.validationSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.validationSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // validationSamplesStartTextBox
+      // 
+      this.validationSamplesStartTextBox.Location = new System.Drawing.Point(119, 43);
+      this.validationSamplesStartTextBox.Name = "validationSamplesStartTextBox";
+      this.validationSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
+      this.validationSamplesStartTextBox.TabIndex = 12;
+      this.validationSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.validationSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // validationLabel
+      // 
+      this.validationLabel.AutoSize = true;
+      this.validationLabel.Location = new System.Drawing.Point(5, 46);
+      this.validationLabel.Name = "validationLabel";
+      this.validationLabel.Size = new System.Drawing.Size(97, 13);
+      this.validationLabel.TabIndex = 11;
+      this.validationLabel.Text = "Validation samples:";
+      // 
+      // testSamplesEndTextBox
+      // 
+      this.testSamplesEndTextBox.Location = new System.Drawing.Point(221, 68);
+      this.testSamplesEndTextBox.Name = "testSamplesEndTextBox";
+      this.testSamplesEndTextBox.Size = new System.Drawing.Size(96, 20);
+      this.testSamplesEndTextBox.TabIndex = 16;
+      this.testSamplesEndTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.testSamplesEndTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // testSamplesStartTextBox
+      // 
+      this.testSamplesStartTextBox.Location = new System.Drawing.Point(119, 68);
+      this.testSamplesStartTextBox.Name = "testSamplesStartTextBox";
+      this.testSamplesStartTextBox.Size = new System.Drawing.Size(96, 20);
+      this.testSamplesStartTextBox.TabIndex = 15;
+      this.testSamplesStartTextBox.Validated += new System.EventHandler(this.samplesTextBox_Validated);
+      this.testSamplesStartTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.samplesTextBox_Validating);
+      // 
+      // testLabel
+      // 
+      this.testLabel.AutoSize = true;
+      this.testLabel.Location = new System.Drawing.Point(30, 71);
+      this.testLabel.Name = "testLabel";
+      this.testLabel.Size = new System.Drawing.Size(72, 13);
+      this.testLabel.TabIndex = 14;
+      this.testLabel.Text = "Test samples:";
+      // 
+      // targetsListBox
+      // 
+      this.targetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.targetsListBox.FormattingEnabled = true;
+      this.targetsListBox.Location = new System.Drawing.Point(8, 15);
+      this.targetsListBox.Name = "targetsListBox";
+      this.targetsListBox.Size = new System.Drawing.Size(153, 79);
+      this.targetsListBox.TabIndex = 19;
+      this.targetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.targetsListBox_ItemCheck);
+      // 
+      // inputsListBox
+      // 
+      this.inputsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.inputsListBox.FormattingEnabled = true;
+      this.inputsListBox.Location = new System.Drawing.Point(6, 15);
+      this.inputsListBox.Name = "inputsListBox";
+      this.inputsListBox.Size = new System.Drawing.Size(141, 79);
+      this.inputsListBox.TabIndex = 21;
+      this.inputsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.inputsListBox_ItemCheck);
+      // 
+      // autoregressiveCheckBox
+      // 
+      this.autoregressiveCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.autoregressiveCheckBox.AutoSize = true;
+      this.autoregressiveCheckBox.Enabled = false;
+      this.autoregressiveCheckBox.Location = new System.Drawing.Point(131, 83);
+      this.autoregressiveCheckBox.Name = "autoregressiveCheckBox";
+      this.autoregressiveCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.autoregressiveCheckBox.TabIndex = 22;
+      this.autoregressiveCheckBox.UseVisualStyleBackColor = true;
+      this.autoregressiveCheckBox.CheckedChanged += new System.EventHandler(this.autoregressiveCheckBox_CheckedChanged);
+      // 
+      // targetsGroupBox
+      // 
+      this.targetsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.targetsGroupBox.Controls.Add(this.targetsListBox);
+      this.targetsGroupBox.Location = new System.Drawing.Point(29, 515);
+      this.targetsGroupBox.Name = "targetsGroupBox";
+      this.targetsGroupBox.Size = new System.Drawing.Size(167, 100);
+      this.targetsGroupBox.TabIndex = 23;
+      this.targetsGroupBox.TabStop = false;
+      this.targetsGroupBox.Text = "Target variables";
+      // 
+      // inputsGroupBox
+      // 
+      this.inputsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.inputsGroupBox.Controls.Add(this.inputsListBox);
+      this.inputsGroupBox.Location = new System.Drawing.Point(202, 515);
+      this.inputsGroupBox.Name = "inputsGroupBox";
+      this.inputsGroupBox.Size = new System.Drawing.Size(153, 100);
+      this.inputsGroupBox.TabIndex = 24;
+      this.inputsGroupBox.TabStop = false;
+      this.inputsGroupBox.Text = "Input variables:";
+      // 
+      // partitioningGroupBox
+      // 
+      this.partitioningGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.partitioningGroupBox.Controls.Add(this.validationSamplesEndTextBox);
+      this.partitioningGroupBox.Controls.Add(this.trainingLabel);
+      this.partitioningGroupBox.Controls.Add(this.trainingSamplesStartTextBox);
+      this.partitioningGroupBox.Controls.Add(this.trainingSamplesEndTextBox);
+      this.partitioningGroupBox.Controls.Add(this.validationLabel);
+      this.partitioningGroupBox.Controls.Add(this.testSamplesEndTextBox);
+      this.partitioningGroupBox.Controls.Add(this.validationSamplesStartTextBox);
+      this.partitioningGroupBox.Controls.Add(this.testSamplesStartTextBox);
+      this.partitioningGroupBox.Controls.Add(this.testLabel);
+      this.partitioningGroupBox.Location = new System.Drawing.Point(29, 409);
+      this.partitioningGroupBox.Name = "partitioningGroupBox";
+      this.partitioningGroupBox.Size = new System.Drawing.Size(326, 100);
+      this.partitioningGroupBox.TabIndex = 25;
+      this.partitioningGroupBox.TabStop = false;
+      this.partitioningGroupBox.Text = "Data set partitions:";
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "txt";
+      this.openFileDialog.FileName = "txt";
+      this.openFileDialog.Filter = "Text files|*.txt|All files|*.*";
+      this.openFileDialog.Title = "Import data set from file";
+      // 
+      // classificationRadioButton
+      // 
+      this.classificationRadioButton.AutoSize = true;
+      this.classificationRadioButton.Checked = true;
+      this.classificationRadioButton.Location = new System.Drawing.Point(6, 16);
+      this.classificationRadioButton.Name = "classificationRadioButton";
+      this.classificationRadioButton.Size = new System.Drawing.Size(86, 17);
+      this.classificationRadioButton.TabIndex = 28;
+      this.classificationRadioButton.TabStop = true;
+      this.classificationRadioButton.Text = "Classification";
+      this.classificationRadioButton.UseVisualStyleBackColor = true;
+      this.classificationRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
+      // 
+      // regressionRadioButton
+      // 
+      this.regressionRadioButton.AutoSize = true;
+      this.regressionRadioButton.Location = new System.Drawing.Point(6, 39);
+      this.regressionRadioButton.Name = "regressionRadioButton";
+      this.regressionRadioButton.Size = new System.Drawing.Size(78, 17);
+      this.regressionRadioButton.TabIndex = 29;
+      this.regressionRadioButton.Text = "Regression";
+      this.regressionRadioButton.UseVisualStyleBackColor = true;
+      this.regressionRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
+      // 
+      // timeSeriesRadioButton
+      // 
+      this.timeSeriesRadioButton.AutoSize = true;
+      this.timeSeriesRadioButton.Location = new System.Drawing.Point(6, 62);
+      this.timeSeriesRadioButton.Name = "timeSeriesRadioButton";
+      this.timeSeriesRadioButton.Size = new System.Drawing.Size(119, 17);
+      this.timeSeriesRadioButton.TabIndex = 30;
+      this.timeSeriesRadioButton.Text = "Time series forecast";
+      this.timeSeriesRadioButton.UseVisualStyleBackColor = true;
+      this.timeSeriesRadioButton.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
+      // 
+      // minTimeOffsetLabel
+      // 
+      this.minTimeOffsetLabel.AutoSize = true;
+      this.minTimeOffsetLabel.Enabled = false;
+      this.minTimeOffsetLabel.Location = new System.Drawing.Point(38, 106);
+      this.minTimeOffsetLabel.Name = "minTimeOffsetLabel";
+      this.minTimeOffsetLabel.Size = new System.Drawing.Size(87, 13);
+      this.minTimeOffsetLabel.TabIndex = 31;
+      this.minTimeOffsetLabel.Text = "Min. Time Offset:";
+      // 
+      // minTimeOffsetTextBox
+      // 
+      this.minTimeOffsetTextBox.Enabled = false;
+      this.minTimeOffsetTextBox.Location = new System.Drawing.Point(131, 103);
+      this.minTimeOffsetTextBox.Name = "minTimeOffsetTextBox";
+      this.minTimeOffsetTextBox.Size = new System.Drawing.Size(96, 20);
+      this.minTimeOffsetTextBox.TabIndex = 32;
+      this.minTimeOffsetTextBox.Validated += new System.EventHandler(this.timeOffsetTextBox_Validated);
+      this.minTimeOffsetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeOffsetTextBox_Validating);
+      // 
+      // learningTaskGroupBox
+      // 
+      this.learningTaskGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.learningTaskGroupBox.Controls.Add(this.autoregressiveLabel);
+      this.learningTaskGroupBox.Controls.Add(this.classificationRadioButton);
+      this.learningTaskGroupBox.Controls.Add(this.minTimeOffsetLabel);
+      this.learningTaskGroupBox.Controls.Add(this.minTimeOffsetTextBox);
+      this.learningTaskGroupBox.Controls.Add(this.maxTimeOffsetLabel);
+      this.learningTaskGroupBox.Controls.Add(this.regressionRadioButton);
+      this.learningTaskGroupBox.Controls.Add(this.maxTimeOffsetTextBox);
+      this.learningTaskGroupBox.Controls.Add(this.timeSeriesRadioButton);
+      this.learningTaskGroupBox.Controls.Add(this.autoregressiveCheckBox);
+      this.learningTaskGroupBox.Location = new System.Drawing.Point(29, 621);
+      this.learningTaskGroupBox.Name = "learningTaskGroupBox";
+      this.learningTaskGroupBox.Size = new System.Drawing.Size(326, 163);
+      this.learningTaskGroupBox.TabIndex = 35;
+      this.learningTaskGroupBox.TabStop = false;
+      this.learningTaskGroupBox.Text = "Learning task";
+      // 
+      // autoregressiveLabel
+      // 
+      this.autoregressiveLabel.AutoSize = true;
+      this.autoregressiveLabel.Enabled = false;
+      this.autoregressiveLabel.Location = new System.Drawing.Point(45, 83);
+      this.autoregressiveLabel.Name = "autoregressiveLabel";
+      this.autoregressiveLabel.Size = new System.Drawing.Size(80, 13);
+      this.autoregressiveLabel.TabIndex = 35;
+      this.autoregressiveLabel.Text = "Autoregressive:";
+      // 
+      // maxTimeOffsetLabel
+      // 
+      this.maxTimeOffsetLabel.AutoSize = true;
+      this.maxTimeOffsetLabel.Enabled = false;
+      this.maxTimeOffsetLabel.Location = new System.Drawing.Point(35, 132);
+      this.maxTimeOffsetLabel.Name = "maxTimeOffsetLabel";
+      this.maxTimeOffsetLabel.Size = new System.Drawing.Size(90, 13);
+      this.maxTimeOffsetLabel.TabIndex = 33;
+      this.maxTimeOffsetLabel.Text = "Max. Time Offset:";
+      // 
+      // maxTimeOffsetTextBox
+      // 
+      this.maxTimeOffsetTextBox.Enabled = false;
+      this.maxTimeOffsetTextBox.Location = new System.Drawing.Point(131, 129);
+      this.maxTimeOffsetTextBox.Name = "maxTimeOffsetTextBox";
+      this.maxTimeOffsetTextBox.Size = new System.Drawing.Size(96, 20);
+      this.maxTimeOffsetTextBox.TabIndex = 34;
+      this.maxTimeOffsetTextBox.Validated += new System.EventHandler(this.timeOffsetTextBox_Validated);
+      this.maxTimeOffsetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeOffsetTextBox_Validating);
+      // 
+      // datasetView
+      // 
+      this.datasetView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.datasetView.Caption = "Editor";
+      this.datasetView.Dataset = null;
+      this.datasetView.Filename = null;
+      this.datasetView.Location = new System.Drawing.Point(3, 32);
+      this.datasetView.Name = "datasetView";
+      this.datasetView.Size = new System.Drawing.Size(395, 371);
+      this.datasetView.TabIndex = 17;
+      // 
+      // ProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.learningTaskGroupBox);
+      this.Controls.Add(this.partitioningGroupBox);
+      this.Controls.Add(this.inputsGroupBox);
+      this.Controls.Add(this.targetsGroupBox);
+      this.Controls.Add(this.datasetView);
+      this.Controls.Add(this.importButton);
+      this.Name = "ProblemView";
+      this.Size = new System.Drawing.Size(406, 787);
+      this.targetsGroupBox.ResumeLayout(false);
+      this.inputsGroupBox.ResumeLayout(false);
+      this.partitioningGroupBox.ResumeLayout(false);
+      this.partitioningGroupBox.PerformLayout();
+      this.learningTaskGroupBox.ResumeLayout(false);
+      this.learningTaskGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button importButton;
+    private System.Windows.Forms.TextBox trainingSamplesStartTextBox;
+    private System.Windows.Forms.Label trainingLabel;
+    private System.Windows.Forms.TextBox trainingSamplesEndTextBox;
+    private System.Windows.Forms.TextBox validationSamplesEndTextBox;
+    private System.Windows.Forms.TextBox validationSamplesStartTextBox;
+    private System.Windows.Forms.Label validationLabel;
+    private System.Windows.Forms.TextBox testSamplesEndTextBox;
+    private System.Windows.Forms.TextBox testSamplesStartTextBox;
+    private System.Windows.Forms.Label testLabel;
+    private HeuristicLab.DataAnalysis.DatasetView datasetView;
+    private System.Windows.Forms.CheckedListBox targetsListBox;
+    private System.Windows.Forms.CheckedListBox inputsListBox;
+    private System.Windows.Forms.CheckBox autoregressiveCheckBox;
+    private System.Windows.Forms.GroupBox targetsGroupBox;
+    private System.Windows.Forms.GroupBox inputsGroupBox;
+    private System.Windows.Forms.GroupBox partitioningGroupBox;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.RadioButton classificationRadioButton;
+    private System.Windows.Forms.RadioButton regressionRadioButton;
+    private System.Windows.Forms.RadioButton timeSeriesRadioButton;
+    private System.Windows.Forms.Label minTimeOffsetLabel;
+    private System.Windows.Forms.TextBox minTimeOffsetTextBox;
+    private System.Windows.Forms.GroupBox learningTaskGroupBox;
+    private System.Windows.Forms.Label maxTimeOffsetLabel;
+    private System.Windows.Forms.TextBox maxTimeOffsetTextBox;
+    private System.Windows.Forms.Label autoregressiveLabel;
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.cs	(revision 1287)
@@ -0,0 +1,244 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.DataAnalysis;
+using System.Diagnostics;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class ProblemView : ViewBase {
+    private Problem problem;
+
+    public ProblemView(Problem problem) {
+      this.problem = problem;
+      InitializeComponent();
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      datasetView.Dataset = problem.DataSet;
+      trainingSamplesStartTextBox.Text = problem.TrainingSamplesStart.ToString();
+      trainingSamplesEndTextBox.Text = problem.TrainingSamplesEnd.ToString();
+      validationSamplesStartTextBox.Text = problem.ValidationSamplesStart.ToString();
+      validationSamplesEndTextBox.Text = problem.ValidationSamplesEnd.ToString();
+      testSamplesStartTextBox.Text = problem.TestSamplesStart.ToString();
+      testSamplesEndTextBox.Text = problem.TestSamplesEnd.ToString();
+      minTimeOffsetTextBox.Text = problem.MinTimeOffset.ToString();
+      maxTimeOffsetTextBox.Text = problem.MaxTimeOffset.ToString();
+      autoregressiveCheckBox.Checked = problem.AutoRegressive;
+      switch (problem.LearningTask) {
+        case LearningTask.Classification: classificationRadioButton.Checked = true; break;
+        case LearningTask.Regression: regressionRadioButton.Checked = true; break;
+        case LearningTask.TimeSeries: timeSeriesRadioButton.Checked = true; break;
+      }
+      targetsListBox.Items.Clear();
+      inputsListBox.Items.Clear();
+      for (int i = 0; i < problem.DataSet.Columns; i++) {
+        targetsListBox.Items.Add(problem.DataSet.GetVariableName(i), problem.AllowedTargetVariables.Contains(i));
+        inputsListBox.Items.Add(problem.DataSet.GetVariableName(i), problem.AllowedInputVariables.Contains(i));
+      }
+    }
+
+    private void importButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        DatasetParser parser = new DatasetParser();
+        bool success = false;
+        try {
+          try {
+            parser.Import(openFileDialog.FileName, true);
+            success = true;
+          }
+          catch (DataFormatException ex) {
+            ShowWarningMessageBox(ex);
+            // not possible to parse strictly => clear and try to parse non-strict
+            parser.Reset();
+            parser.Import(openFileDialog.FileName, false);
+            success = true;
+          }
+        }
+        catch (DataFormatException ex) {
+          // if the non-strict parsing also failed then show the exception
+          ShowErrorMessageBox(ex);
+        }
+        if (success) {
+          Dataset dataset = (Dataset)problem.DataSet;
+          dataset.Rows = parser.Rows;
+          dataset.Columns = parser.Columns;
+          for (int i = 0; i < parser.VariableNames.Length; i++) {
+            dataset.SetVariableName(i, parser.VariableNames[i]);
+          }
+          dataset.Name = parser.ProblemName;
+          dataset.Samples = new double[dataset.Rows * dataset.Columns];
+          Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
+          datasetView.Dataset = problem.DataSet;
+
+          problem.TrainingSamplesStart = parser.TrainingSamplesStart;
+          problem.ValidationSamplesEnd = parser.TrainingSamplesStart;
+          problem.TrainingSamplesEnd = parser.TrainingSamplesEnd;
+          problem.ValidationSamplesStart = parser.ValidationSamplesStart;
+          problem.ValidationSamplesEnd = parser.ValidationSamplesEnd;
+          problem.TestSamplesStart = parser.TestSamplesStart;
+          problem.TestSamplesEnd = parser.TestSamplesEnd;
+          problem.AllowedTargetVariables.Add(parser.TargetVariable);
+
+          List<int> nonInputVariables = parser.NonInputVariables;
+          for (int i = 0; i < dataset.Columns; i++) {
+            if (!nonInputVariables.Contains(i)) problem.AllowedInputVariables.Add(i);
+          }
+          Refresh();
+        }
+      }
+
+    }
+
+    private void targetsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
+      if (e.NewValue == CheckState.Checked && !problem.AllowedTargetVariables.Contains(e.Index))
+        problem.AllowedTargetVariables.Add(e.Index);
+      else if (e.NewValue == CheckState.Unchecked && problem.AllowedTargetVariables.Contains(e.Index))
+        problem.AllowedTargetVariables.Remove(e.Index);
+    }
+
+    private void inputsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
+      if (e.NewValue == CheckState.Checked && !problem.AllowedInputVariables.Contains(e.Index))
+        problem.AllowedInputVariables.Add(e.Index);
+      else if (e.NewValue == CheckState.Unchecked && problem.AllowedInputVariables.Contains(e.Index))
+        problem.AllowedInputVariables.Remove(e.Index);
+    }
+
+    private void autoregressiveCheckBox_CheckedChanged(object sender, EventArgs e) {
+      problem.AutoRegressive = autoregressiveCheckBox.Checked;
+    }
+
+    private void samplesTextBox_Validating(object sender, CancelEventArgs e) {
+      try {
+        int trainingStart = int.Parse(trainingSamplesStartTextBox.Text);
+        int trainingEnd = int.Parse(trainingSamplesEndTextBox.Text);
+        int validationStart = int.Parse(validationSamplesStartTextBox.Text);
+        int validationEnd = int.Parse(validationSamplesEndTextBox.Text);
+        int testStart = int.Parse(testSamplesStartTextBox.Text);
+        int testEnd = int.Parse(testSamplesEndTextBox.Text);
+        if (trainingStart < 0 || validationStart < 0 || testStart < 0 ||
+          trainingEnd >= problem.DataSet.Rows || validationEnd >= problem.DataSet.Rows || testEnd >= problem.DataSet.Rows ||
+          trainingStart >= trainingEnd ||
+          validationStart >= validationEnd ||
+          testStart >= testEnd ||
+          IsOverlapping(trainingStart, trainingEnd, validationStart, validationEnd) ||
+          IsOverlapping(trainingStart, trainingEnd, testStart, testEnd) ||
+          IsOverlapping(validationStart, validationEnd, testStart, testEnd))
+          ColorSamplesTextBoxes(Color.Red);
+        else
+          ColorSamplesTextBoxes(Color.White);
+      }
+      catch (FormatException ex) {
+        ColorSamplesTextBoxes(Color.Red);
+      }
+    }
+
+    private void samplesTextBox_Validated(object sender, EventArgs e) {
+      problem.TrainingSamplesStart = int.Parse(trainingSamplesStartTextBox.Text);
+      problem.TrainingSamplesEnd = int.Parse(trainingSamplesEndTextBox.Text);
+      problem.ValidationSamplesStart = int.Parse(validationSamplesStartTextBox.Text);
+      problem.ValidationSamplesEnd = int.Parse(validationSamplesEndTextBox.Text);
+      problem.TestSamplesStart = int.Parse(testSamplesStartTextBox.Text);
+      problem.TestSamplesEnd = int.Parse(testSamplesEndTextBox.Text);
+    }
+
+    private void ColorSamplesTextBoxes(Color color) {
+      trainingSamplesStartTextBox.BackColor = color;
+      trainingSamplesEndTextBox.BackColor = color;
+      validationSamplesStartTextBox.BackColor = color;
+      validationSamplesEndTextBox.BackColor = color;
+      testSamplesStartTextBox.BackColor = color;
+      testSamplesEndTextBox.BackColor = color;
+    }
+
+    private bool IsOverlapping(int x0, int y0, int x1, int y1) {
+      Trace.Assert(x0 <= y0 && x1 <= y1);
+      int tmp;
+      // make sure that x0,y0 is the left interval
+      if (x1 < x0) {
+        tmp = x1;
+        x1 = x0;
+        x0 = tmp;
+        tmp = y1;
+        y1 = y0;
+        y0 = tmp;
+      }
+      return y0 > x1;
+    }
+    private void ShowWarningMessageBox(Exception ex) {
+      MessageBox.Show(ex.Message,
+                      "Warning - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Warning);
+    }
+    private void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(BuildErrorMessage(ex),
+                      "Error - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+    private string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while (ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+
+    #region gui events
+    private void radioButton_CheckedChanged(object sender, EventArgs e) {
+      minTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
+      minTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
+      maxTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
+      maxTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
+      autoregressiveCheckBox.Enabled = timeSeriesRadioButton.Checked;
+      autoregressiveLabel.Enabled = timeSeriesRadioButton.Checked;
+      if (timeSeriesRadioButton.Checked) problem.LearningTask = LearningTask.TimeSeries;
+      else if (classificationRadioButton.Checked) problem.LearningTask = LearningTask.Classification;
+      else if (regressionRadioButton.Checked) problem.LearningTask = LearningTask.Regression;
+    }
+
+    private void timeOffsetTextBox_Validating(object sender, CancelEventArgs e) {
+      int min, max;
+      e.Cancel = !int.TryParse(minTimeOffsetTextBox.Text, out min);
+      e.Cancel = !int.TryParse(maxTimeOffsetTextBox.Text, out max);
+      e.Cancel = min > max;
+    }
+    private void timeOffsetTextBox_Validated(object sender, EventArgs e) {
+      problem.MinTimeOffset = int.Parse(minTimeOffsetTextBox.Text);
+      problem.MaxTimeOffset = int.Parse(maxTimeOffsetTextBox.Text);
+    }
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ProblemView.resx	(revision 1287)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: trunk/sources/HeuristicLab.CEDMA.Core/Result.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Result.cs	(revision 1286)
+++ 	(revision )
@@ -1,74 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the 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;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class Result : IResult {
-    public IDatabase Database { get; set; }
-    public long Id { get; set; }
-    public string Summary { get; set; }
-    public string Description { get; set; }
-    private IItem item;
-    public IItem Item {
-      get {
-        if(item == null) {
-          byte[] rawData = Database.GetResultRawData(Id);
-          item = (IItem)PersistenceManager.RestoreFromGZip(rawData);
-        }
-        return item;
-      }
-    }
-    public Result()
-      : base() {
-    }
-
-    public Result(IDatabase database, long id)
-      : this() {
-      Database = database;
-      Id = id;
-    }
-
-
-    public ICollection<IResult> SubResults {
-      get {
-        List<IResult> results = new List<IResult>();
-        foreach(ResultEntry entry in Database.GetSubResults(Id)) {
-          Result result = new Result(Database, entry.Id);
-          result.Summary = entry.Summary;
-          result.Description = entry.Description;
-          results.Add(result);
-        }
-        return results;
-      }
-    } 
-
-    public IView CreateView() {
-      return Item.CreateView();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultExporter.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultExporter.cs	(revision 1286)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using System.IO;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class ResultExporter {
-    internal void Export(IAgent agent, ResultTable t) {
-      foreach(IResult r in agent.Results) {
-        Export(r, t);
-      }
-      foreach(IAgent a in agent.SubAgents) {
-        Export(a, t);
-      }
-    }
-
-    private void Export(IResult result, ResultTable t) {
-      Export(result.Item, t);
-      foreach(IResult subResult in result.SubResults) {
-        Export(subResult, t);
-      }
-    }
-
-    private void Export(IItem item, ResultTable t) {
-      if(item is IScope) {
-        IScope scope = item as IScope;
-        ResultRow row = new ResultRow();
-        foreach(IVariable variable in scope.Variables) {
-          row.AddAttribute(variable.Name, variable.Value.ToString());
-        }
-        t.AddRow(row);
-      } 
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultTable.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultTable.cs	(revision 1286)
+++ 	(revision )
@@ -1,73 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using System.IO;
-
-namespace HeuristicLab.CEDMA.Core {
-  public class ResultRow {
-    private Dictionary<string, string> attributes = new Dictionary<string, string>();
-
-    public void AddAttribute(string name, string value) {
-      attributes[name] = value;
-    }
-
-    public ICollection<string> AttributeNames {
-      get { return attributes.Keys; }
-    }
-
-    public string AttributeValue(string name) {
-      string value = "";
-      attributes.TryGetValue(name, out value);
-      return value;
-    }
-  }
-
-  public class ResultTable {
-
-    private List<ResultRow> rows = new List<ResultRow>();
-    private List<string> allAttributeNames = new List<string>();
-
-    public void AddRow(ResultRow r) {
-      rows.Add(r);
-      foreach(string name in r.AttributeNames) if(!allAttributeNames.Contains(name)) allAttributeNames.Add(name);
-    }
-
-    public void Write(Stream s) {
-      using(StreamWriter w = new StreamWriter(s)) {
-        foreach(string attributeName in allAttributeNames) w.Write(attributeName + ";");
-        w.WriteLine();
-        foreach(ResultRow r in rows) {
-          foreach(string attributeName in allAttributeNames) {
-            w.Write(r.AttributeValue(attributeName) + ";"); // we should probably escape the ';' if it occures in the value
-          }
-          w.WriteLine();
-        }
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Core/Results.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/Results.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/Results.cs	(revision 1287)
@@ -0,0 +1,125 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using System.Drawing;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Results : ItemBase {
+    private string[] categoricalVariables = null;
+    public string[] CategoricalVariables {
+      get {
+        if (categoricalVariables == null) {
+          LoadModelAttributes();
+        }
+        return categoricalVariables;
+      }
+    }
+
+    private string[] ordinalVariables = null;
+    public string[] OrdinalVariables {
+      get {
+        if (ordinalVariables == null) {
+          LoadModelAttributes();
+        }
+        return ordinalVariables;
+      }
+    }
+
+    private IStore store;
+    public IStore Store {
+      get { return store; }
+      set {
+        store = value;
+      }
+    }
+
+    private Entity dataSetEntity;
+
+    public Results(IStore store) {
+      this.store = store;
+    }
+
+    internal void FilterDataSet(Entity entity) {
+      this.dataSetEntity = entity;
+    }
+
+    private List<ResultsEntry> entries = null;
+    private bool cached = false;
+    public IEnumerable<ResultsEntry> GetEntries() {
+      if (!cached)
+        return SelectRows();
+      return entries.AsEnumerable();
+    }
+
+    private IEnumerable<ResultsEntry> SelectRows() {
+      if (store == null) yield break;
+      entries = new List<ResultsEntry>();
+      var results = store.Query("<" + dataSetEntity + "> <" + Ontology.PredicateHasModel + "> ?Model ." + Environment.NewLine +
+        "?Model ?Attribute ?Value .")
+        .GroupBy(x => (Entity)x.Get("Model"));
+      foreach (var modelBindings in results) {
+        ResultsEntry entry = new ResultsEntry(modelBindings.Key.Uri);
+        foreach (var binding in modelBindings) {
+          if (binding.Get("Value") is Literal) {
+            string name = ((Entity)binding.Get("Attribute")).Uri.Replace(Ontology.CedmaNameSpace, "");
+            if (entry.Get(name) == null) {
+              object value = ((Literal)binding.Get("Value")).Value;
+              entry.Set(name, value);
+            }
+          }
+        }
+        entries.Add(entry);
+        yield return entry;
+      }
+
+      FireChanged();
+      cached = true;
+    }
+
+    internal IEnumerable<string> SelectModelAttributes() {
+      return CategoricalVariables.Concat(OrdinalVariables);
+    }
+
+    private void LoadModelAttributes() {
+      this.ordinalVariables =
+        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeOrdinalAttribute + "> .")
+        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
+        .ToArray();
+      this.categoricalVariables =
+        store.Query("?ModelAttribute <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeCategoricalAttribute + "> .")
+        .Select(s => ((Entity)s.Get("ModelAttribute")).Uri.Replace(Ontology.CedmaNameSpace, ""))
+        .ToArray();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs	(revision 1287)
@@ -0,0 +1,80 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class ResultsEntry {
+    private Dictionary<string, object> values = new Dictionary<string, object>();
+
+    private bool selected = false;
+    public bool Selected { 
+      get { return selected; }
+      set { selected = value; } 
+    }
+
+    private string uri;
+    public string Uri { get { return uri; } }
+
+    public ResultsEntry(string uri) {
+      this.uri = uri;
+    }
+
+    public void Set(string name, object value) {
+      values.Add(name, value);
+    }
+
+    public object Get(string name) {
+      if (name == null || !values.ContainsKey(name)) return null;
+      return values[name];
+    }
+
+    public void ToggleSelected() {
+      selected = !selected;
+    }
+
+    public string GetToolTipText() {
+      StringBuilder b = new StringBuilder();
+      foreach (KeyValuePair<string, object> v in values) {
+        b.Append(v.Key).Append(" = ").Append(v.Value).AppendLine();
+      }
+      return b.ToString();
+    }
+
+    //internal void OpenModel() {
+    //  resultList.OpenModel(this);
+    //}
+
+    //internal void OpenGeneratingAlgorithm() {
+    //  resultList.OpenAlgorithm(this);
+    //}
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.Designer.cs	(revision 1287)
@@ -0,0 +1,61 @@
+﻿namespace HeuristicLab.CEDMA.Core {
+  partial class TableResultsView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = false;
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataGridView.Location = new System.Drawing.Point(0, 0);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.ReadOnly = true;
+      this.dataGridView.Size = new System.Drawing.Size(450, 459);
+      this.dataGridView.TabIndex = 0;
+      this.dataGridView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridView_MouseDoubleClick);
+      this.dataGridView.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);
+      // 
+      // TableResultsView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataGridView);
+      this.Name = "TableResultsView";
+      this.Size = new System.Drawing.Size(450, 459);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.cs	(revision 1287)
@@ -0,0 +1,90 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+
+  public partial class TableResultsView : ViewBase {
+    private Results Results {
+      get { return (Results)Item; }
+      set { Item = value; }
+    }
+    private bool suppressEvents;
+    public TableResultsView(Results results) {
+      suppressEvents = false;
+      InitializeComponent();
+      Results = results;
+      results.Changed += new EventHandler(results_Changed);
+    }
+
+    void results_Changed(object sender, EventArgs e) {
+      if (suppressEvents) return;
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      suppressEvents = true;
+      dataGridView.Rows.Clear();
+      dataGridView.Columns.Clear();
+      List<string> attributeNames = Results.SelectModelAttributes().ToList();
+      foreach (var attribute in attributeNames) {
+        dataGridView.Columns.Add(attribute, attribute);
+      }
+
+      var entries = Results.GetEntries();
+      foreach (var entry in entries) {
+        int rowIndex = dataGridView.Rows.Add();
+        dataGridView.Rows[rowIndex].Tag = entry;
+        foreach (string attrName in attributeNames) {
+          dataGridView.Rows[rowIndex].Cells[attrName].Value = entry.Get(attrName);
+        }
+        if (entry.Selected) dataGridView.Rows[rowIndex].Selected = true;
+      }
+      dataGridView.Update();
+      suppressEvents = false;
+    }
+
+    private void dataGridView_SelectionChanged(object sender, EventArgs e) {
+      if (suppressEvents) return;
+      foreach (DataGridViewRow row in dataGridView.Rows) {
+        ((ResultsEntry)row.Tag).Selected = row.Selected;
+      }
+      suppressEvents = true;
+      Results.FireChanged();
+      suppressEvents = false;
+    }
+
+    private void dataGridView_MouseDoubleClick(object sender, MouseEventArgs e) {
+      if (e.Button == MouseButtons.Left && e.Clicks == 2) {
+        DataGridView.HitTestInfo hitInfo = dataGridView.HitTest(e.X, e.Y);
+        ResultsEntry entry = (ResultsEntry)dataGridView.Rows[hitInfo.RowIndex].Tag;
+        string serializedData =  (string)entry.Get(Ontology.PredicateSerializedData.Uri.Replace(Ontology.CedmaNameSpace, ""));
+        var model = (IItem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(serializedData));
+        PluginManager.ControlManager.ShowControl(model.CreateView());
+      }
+    }
+  }
+
+  public class TablesResultsViewFactory : IResultsViewFactory {
+    #region IResultsViewFactory Members
+
+    public string Name {
+      get { return "Table"; }
+    }
+
+    public IControl CreateView(Results results) {
+      return new TableResultsView(results);
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Core/TableResultsView.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs	(revision 1287)
@@ -35,4 +35,8 @@
     }
 
+    public override string ToString() {
+      return Uri;
+    }
+
     public override bool Equals(object obj) {
       if(this == obj) return true;
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1287)
@@ -70,5 +70,6 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="AgentEntry.cs" />
+    <Compile Include="Variable.cs" />
+    <Compile Include="Ontology.cs" />
     <Compile Include="SelectFilter.cs" />
     <Compile Include="SerializedLiteral.cs" />
@@ -79,9 +80,7 @@
     <Compile Include="IStore.cs" />
     <Compile Include="OperatorEntry.cs" />
-    <Compile Include="ProcessStatus.cs" />
-    <Compile Include="ResultEntry.cs" />
     <Compile Include="HeuristicLabCedmaDbInterfacesPlugin.cs" />
-    <Compile Include="IDatabase.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="VariableBindings.cs" />
   </ItemGroup>
   <ItemGroup>
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs	(revision 1287)
@@ -35,8 +35,8 @@
 
     [OperationContract]
-    IList<Statement> Select(Statement template);
+    ICollection<VariableBindings> Query(ICollection<Statement> query);
 
-    [OperationContract(Name = "SelectFiltered")]
-    IList<Statement> Select(SelectFilter filter);
+    [OperationContract(Name="QueryN3")]
+    ICollection<VariableBindings> Query(string query);
   }
 }
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Ontology.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Ontology.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Ontology.cs	(revision 1287)
@@ -0,0 +1,235 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  public static class Ontology {
+    public static string CedmaNameSpace {
+      get { return "http://www.heuristiclab.com/cedma/"; }
+    }
+
+    #region model attribute types
+    /// <summary>
+    /// Attribute value is ordinal, values can be sorted.
+    /// Examples are quality measures or complexity measures.
+    /// </summary>
+    public static Entity TypeOrdinalAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeOrdinalAttribute"); }
+    }
+    /// <summary>
+    /// Attribute value is categorical and thus can't be sorted.
+    /// Examples is target-variable.
+    /// </summary>
+    public static Entity TypeCategoricalAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeCategoricalAttribute"); }
+    }
+    /// <summary>
+    /// Attribute is a quality measure
+    /// </summary>
+    public static Entity TypeQualityAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeQualityAttribute"); }
+    }
+    /// <summary>
+    /// Attribute is a complexity measure
+    /// </summary>
+    public static Entity TypeComplexityAttribute {
+      get { return new Entity(CedmaNameSpace + "TypeComplexityAttribute"); }
+    }
+    #endregion
+
+    #region meta-data predicates
+    public static Entity PredicateName {
+      get { return new Entity(CedmaNameSpace + "Name"); }
+    }
+    /// <summary>
+    /// Each entity can have a serialized XML representation that can be loaded in HL.
+    /// </summary>
+    public static Entity PredicateSerializedData {
+      get { return new Entity(CedmaNameSpace + "SerializedData"); }
+    }
+    /// <summary>
+    /// Link from data set to model.
+    /// A data set can have multiple models.
+    /// </summary>
+    public static Entity PredicateHasModel {
+      get { return new Entity(CedmaNameSpace + "Model"); }
+    }
+    /// <summary>
+    /// Link from model to algorithm.
+    /// An algorithm can generate multiple models, each model is generated by exactly one algorithm.
+    /// </summary>
+    public static Entity PredicateGeneratedBy {
+      get { return new Entity(CedmaNameSpace + "GeneratedBy"); }
+    }
+    #endregion
+
+    #region types and type relations
+    public static Entity PredicateInstanceOf {
+      get { return new Entity(CedmaNameSpace + "InstanceOf"); }
+    }
+    public static Entity TypeGeneticProgrammingFunctionTree {
+      get { return new Entity(CedmaNameSpace + "FunctionTree"); }
+    }
+    public static Entity TypeDataSet {
+      get { return new Entity(CedmaNameSpace + "DataSet"); }
+    }
+    public static Entity TypeAlgorithm {
+      get { return new Entity(CedmaNameSpace + "Algorithm"); }
+    }
+    public static Entity TypeModel {
+      get { return new Entity(CedmaNameSpace + "Model"); }
+    }
+    #endregion
+
+    #region default attributes
+    public static Entity TargetVariable {
+      get { return new Entity(CedmaNameSpace + "TargetVariable"); }
+    }
+    public static Entity TrainingMeanSquaredError {
+      get { return new Entity(CedmaNameSpace + "TrainingMeanSquaredError"); }
+    }
+    public static Entity ValidationMeanSquaredError {
+      get { return new Entity(CedmaNameSpace + "ValidationMeanSquaredError"); }
+    }
+    public static Entity TestMeanSquaredError {
+      get { return new Entity(CedmaNameSpace + "TestMeanSquaredError"); }
+    }
+    public static Entity TrainingMeanAbsolutePercentageError {
+      get { return new Entity(CedmaNameSpace + "TrainingMeanAbsolutePercentageError"); }
+    }
+    public static Entity ValidationMeanAbsolutePercentageError {
+      get { return new Entity(CedmaNameSpace + "ValidationMeanAbsolutePercentageError"); }
+    }
+    public static Entity TestMeanAbsolutePercentageError {
+      get { return new Entity(CedmaNameSpace + "TestMeanAbsolutePercentageError"); }
+    }
+    public static Entity TrainingMeanAbsolutePercentageOfRangeError {
+      get { return new Entity(CedmaNameSpace + "TrainingMeanAbsolutePercentageOfRangeError"); }
+    }
+    public static Entity ValidationMeanAbsolutePercentageOfRangeError {
+      get { return new Entity(CedmaNameSpace + "ValidationMeanAbsolutePercentageOfRangeError"); }
+    }
+    public static Entity TestMeanAbsolutePercentageOfRangeError {
+      get { return new Entity(CedmaNameSpace + "TestMeanAbsolutePercentageOfRangeError"); }
+    }
+    public static Entity TrainingCoefficientOfDetermination {
+      get { return new Entity(CedmaNameSpace + "TrainingCoefficientOfDetermination"); }
+    }
+    public static Entity ValidationCoefficientOfDetermination {
+      get { return new Entity(CedmaNameSpace + "ValidationCoefficientOfDetermination"); }
+    }
+    public static Entity TestCoefficientOfDetermination {
+      get { return new Entity(CedmaNameSpace + "TestCoefficientOfDetermination"); }
+    }
+    public static Entity TrainingAccuracy {
+      get { return new Entity(CedmaNameSpace + "TrainingAccuracy"); }
+    }
+    public static Entity ValidationAccuracy {
+      get { return new Entity(CedmaNameSpace + "ValidationAccuracy"); }
+    }
+    public static Entity TestAccuracy {
+      get { return new Entity(CedmaNameSpace + "TestAccuracy"); }
+    }
+    public static Entity TrainingTheilsInequalityCoefficient {
+      get { return new Entity(CedmaNameSpace + "TrainingTheilsInequalityCoefficient"); }
+    }
+    public static Entity ValidationTheilsInequalityCoefficient {
+      get { return new Entity(CedmaNameSpace + "ValidationTheilsInequalityCoefficient"); }
+    }
+    public static Entity TestTheilsInequalityCoefficient {
+      get { return new Entity(CedmaNameSpace + "TestTheilsInequalityCoefficient"); }
+    }
+    public static Entity TreeSize {
+      get { return new Entity(CedmaNameSpace + "TreeSize"); }
+    }
+    public static Entity TreeHeight {
+      get { return new Entity(CedmaNameSpace + "TreeHeight"); }
+    }
+    public static Entity EvaluatedSolutions {
+      get { return new Entity(CedmaNameSpace + "EvaluatedSolutions"); }
+    }
+    #endregion
+
+    public static ICollection<Statement> InitialStatements {
+      get {
+        return new List<Statement> {
+          new Statement(TargetVariable, PredicateInstanceOf, TypeCategoricalAttribute),
+          new Statement(TrainingMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestMeanSquaredError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestMeanSquaredError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestMeanAbsolutePercentageError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestMeanAbsolutePercentageError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestMeanAbsolutePercentageOfRangeError, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestCoefficientOfDetermination, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestCoefficientOfDetermination, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingAccuracy, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationAccuracy, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestAccuracy, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestAccuracy, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TrainingTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TrainingTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(ValidationTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(ValidationTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
+          new Statement(TestTheilsInequalityCoefficient, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TestTheilsInequalityCoefficient, PredicateInstanceOf, TypeQualityAttribute),
+
+          new Statement(TreeSize, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TreeSize, PredicateInstanceOf, TypeComplexityAttribute),
+          new Statement(TreeHeight, PredicateInstanceOf, TypeOrdinalAttribute),
+          new Statement(TreeHeight, PredicateInstanceOf, TypeComplexityAttribute),
+          new Statement(EvaluatedSolutions, PredicateInstanceOf, TypeOrdinalAttribute)
+        };
+      }
+    }
+
+
+    /// <summary>
+    /// Wildcard entity for filtering.
+    /// </summary>
+    public static Entity AnyEntity {
+      get { return new Entity(null); }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs	(revision 1287)
@@ -32,4 +32,5 @@
   [KnownType(typeof(Entity))]
   [KnownType(typeof(SerializedLiteral))]
+  [KnownType(typeof(Variable))]
   public class Statement {
     [DataMember]
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Variable.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Variable.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/Variable.cs	(revision 1287)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class Variable: Entity {
+    [DataMember]
+    public string Name { get; set; }
+
+    public Variable(string name) : base(name) {
+      this.Name = name;
+    }
+
+    public override bool Equals(object obj) {
+      if(this == obj) return true;
+      Variable other = obj as Variable;
+      if(obj == null) return false;
+      else return other.Name.Equals(this.Name);
+    }
+
+    public override int GetHashCode() {
+      return Name.GetHashCode();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/VariableBindings.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/VariableBindings.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.DB.Interfaces/VariableBindings.cs	(revision 1287)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using System.Data;
+using System.Data.Common;
+using System.Threading;
+using System.Xml;
+using System.IO;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  [KnownType(typeof(Literal))]
+  [KnownType(typeof(Entity))]
+  [KnownType(typeof(SerializedLiteral))]
+  public class VariableBindings : IEnumerable<KeyValuePair<string,object>> {
+
+    [DataMember]
+    private Dictionary<string,object> bindings;
+
+    public VariableBindings() {
+      bindings = new Dictionary<string, object>();
+    }
+
+    public void Add(string name, object value) {
+      bindings.Add(name, value);
+    }
+
+    public object Get(string name) {
+      return bindings[name];
+    }
+
+    #region IEnumerable<KeyValuePair<string,object>> Members
+
+    public IEnumerator<KeyValuePair<string, object>> GetEnumerator() {
+      return bindings.GetEnumerator();
+    }
+
+    #endregion
+
+    #region IEnumerable Members
+
+    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 1287)
@@ -53,4 +53,5 @@
   <ItemGroup>
     <Reference Include="SemWeb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="SemWeb.SqliteStore, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -59,8 +60,4 @@
     <Reference Include="System.Data.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.SQLite, Version=1.0.56.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\HeuristicLab.SQLite\System.Data.SQLite.DLL</HintPath>
     </Reference>
     <Reference Include="System.ServiceModel">
@@ -78,5 +75,4 @@
   <ItemGroup>
     <Compile Include="Store.cs" />
-    <Compile Include="Database.cs" />
     <Compile Include="HeuristicLabCedmaDbPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -107,4 +103,5 @@
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="SemWeb.SqliteStore.dll" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 1287)
@@ -28,5 +28,4 @@
   [ClassInfo(Name = "HeuristicLab.CEDMA.DB-3.2")]
   [PluginFile(Filename = "HeuristicLab.CEDMA.DB-3.2.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.SQLite-3.2")]
   [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
   public class HeuristicLabCedmaDbPlugin : PluginBase {
Index: trunk/sources/HeuristicLab.CEDMA.DB/Store.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.DB/Store.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.DB/Store.cs	(revision 1287)
@@ -28,5 +28,4 @@
 using System.ServiceModel;
 using System.Data;
-using System.Data.SQLite;
 using System.Data.Common;
 using System.Threading;
@@ -43,56 +42,78 @@
     private object bigLock = new object();
     public Store(string connectionString) {
-      lock(bigLock) {
+      lock (bigLock) {
         this.connectionString = connectionString;
         store = SemWeb.Store.Create(connectionString);
+        InitStore();
+      }
+    }
+
+    private void InitStore() {
+      foreach (Statement s in Ontology.InitialStatements) {
+        Add(s);
       }
     }
 
     public void Add(Statement statement) {
-      lock(bigLock) {
+      lock (bigLock) {
         store.Add(Translate(statement));
       }
     }
 
-    public IList<Statement> Select(Statement template) {
-      SemWeb.SelectResult result;
-      lock(bigLock) {
-        result = store.Select(Translate(template));
-      }
-      List<Statement> r = new List<Statement>();
-      foreach(SemWeb.Statement resultStatement in result) {
-        r.Add(Translate(resultStatement));
-      }
-      return r;
-    }
-
-    public IList<Statement> Select(SelectFilter filter) {
-      SemWeb.SelectResult result;
-      lock(bigLock) {
-        result = store.Select(Translate(filter));
-      }
-      List<Statement> r = new List<Statement>();
-      foreach(SemWeb.Statement resultStatement in result) {
-        r.Add(Translate(resultStatement));
-      }
-      return r;
-    }
-
-    private SemWeb.SelectFilter Translate(SelectFilter filter) {
-      SemWeb.SelectFilter f = new SemWeb.SelectFilter();
-      f.Subjects = Array.ConvertAll(filter.Subjects, s => Translate(s));
-      f.Predicates = Array.ConvertAll(filter.Predicates, p => Translate(p));
-      f.Objects = Array.ConvertAll(filter.Properties, prop => Translate(prop));
-      return f;
-    }
-
-    private SemWeb.Entity Translate(Entity e) {
+
+    public ICollection<VariableBindings> Query(string query) {
+      MyQueryResultSink resultSink = new MyQueryResultSink();
+      SemWeb.N3Reader n3Reader = new SemWeb.N3Reader(new StringReader(query));
+      SemWeb.Query.GraphMatch matcher = new SemWeb.Query.GraphMatch(n3Reader);
+      matcher.Run(store, resultSink);
+      return resultSink.Bindings;
+    }
+
+    public ICollection<VariableBindings> Query(ICollection<Statement> query) {
+      MyQueryResultSink resultSink = new MyQueryResultSink();
+      Translate(query).Run(store, resultSink);
+      return resultSink.Bindings;
+    }
+
+    private SemWeb.Query.Query Translate(ICollection<Statement> query) {
+      Dictionary<object, object> translatedObjects = new Dictionary<object, object>();
+      SemWeb.MemoryStore queryStore = new SemWeb.MemoryStore(query.Select(st => Translate(st, translatedObjects)).ToArray());
+
+      return new SemWeb.Query.GraphMatch(queryStore);
+    }
+
+
+    //public ICollection<Statement> Select(Statement template) {
+    //  SemWeb.MemoryStore memStore = new SemWeb.MemoryStore();
+    //  lock (bigLock) {
+    //    store.Select(Translate(template), memStore);
+    //  }
+    //  return memStore.Select(x=>Translate(x)).ToList();
+    //}
+
+    //public ICollection<Statement> Select(SelectFilter filter) {
+    //  SemWeb.MemoryStore memStore = new SemWeb.MemoryStore();
+    //  lock (bigLock) {
+    //    store.Select(Translate(filter), memStore);
+    //  }
+    //  return memStore.Select(x => Translate(x)).ToList();
+    //}
+
+    //private SemWeb.SelectFilter Translate(SelectFilter filter) {
+    //  SemWeb.SelectFilter f = new SemWeb.SelectFilter();
+    //  f.Subjects = Array.ConvertAll(filter.Subjects, s => Translate(s));
+    //  f.Predicates = Array.ConvertAll(filter.Predicates, p => Translate(p));
+    //  f.Objects = Array.ConvertAll(filter.Properties, prop => Translate(prop));
+    //  return f;
+    //}
+
+    private static SemWeb.Entity Translate(Entity e) {
       return e.Uri == null ? null : new SemWeb.Entity(e.Uri);
     }
 
-    private SemWeb.Resource Translate(Resource prop) {
-      if(prop is Literal) {
+    private static SemWeb.Resource Translate(Resource prop) {
+      if (prop is Literal) {
         return TranslateLiteral((Literal)prop);
-      } else if(prop is SerializedLiteral) {
+      } else if (prop is SerializedLiteral) {
         return TranslateLiteral((SerializedLiteral)prop);
       } else {
@@ -101,44 +122,77 @@
     }
 
-    private Statement Translate(SemWeb.Statement statement) {
-      if(statement.Object is SemWeb.Literal) {
-        return new Statement(
-          new Entity(statement.Subject.Uri),
-          new Entity(statement.Predicate.Uri),
-          TranslateLiteral((SemWeb.Literal)statement.Object));
-      } else {
-        return new Statement(
-          new Entity(statement.Subject.Uri),
-          new Entity(statement.Predicate.Uri),
-          new Entity(((SemWeb.Entity)statement.Object).Uri));
-      }
-    }
-
-    private SemWeb.Statement Translate(Statement statement) {
+    private static Statement Translate(SemWeb.Statement statement) {
+      return Translate(statement, new Dictionary<object, object>());
+    }
+
+    private static Statement Translate(SemWeb.Statement statement, Dictionary<object, object> translatedObjects) {
+      if (!translatedObjects.ContainsKey(statement.Subject)) {
+        translatedObjects[statement.Subject] = new Entity(statement.Subject.Uri);
+      }
+      if (!translatedObjects.ContainsKey(statement.Predicate)) {
+        translatedObjects[statement.Predicate] = new Entity(statement.Predicate.Uri);
+      }
+      if (!translatedObjects.ContainsKey(statement.Object)) {
+        if (statement.Object is SemWeb.Literal) {
+          translatedObjects[statement.Object] = TranslateLiteral((SemWeb.Literal)statement.Object);
+        } else {
+          translatedObjects[statement.Object] = new Entity(((SemWeb.Entity)statement.Object).Uri);
+        }
+      }
+
+      Entity subjectEntity = (Entity)translatedObjects[statement.Subject];
+      Entity predicateEntity = (Entity)translatedObjects[statement.Predicate];
+      Resource property = (Resource)translatedObjects[statement.Object];
+
+      return new Statement(
+        subjectEntity,
+        predicateEntity,
+        property);
+    }
+
+    private static SemWeb.Statement Translate(Statement statement) {
+      return Translate(statement, new Dictionary<object, object>());
+    }
+
+    private static SemWeb.Statement Translate(Statement statement, Dictionary<object, object> translatedObjects) {
+      if (!translatedObjects.ContainsKey(statement.Subject)) {
+        translatedObjects[statement.Subject] = Translate(statement.Subject);
+      }
+      if (!translatedObjects.ContainsKey(statement.Predicate)) {
+        translatedObjects[statement.Predicate] = Translate(statement.Predicate);
+      }
+      if (!translatedObjects.ContainsKey(statement.Property)) {
+        translatedObjects[statement.Property] = Translate(statement.Property);
+      }
+
+      SemWeb.Entity subject = (SemWeb.Entity)translatedObjects[statement.Subject];
+      SemWeb.Entity predicate = (SemWeb.Entity)translatedObjects[statement.Predicate];
+      SemWeb.Resource property = (SemWeb.Resource)translatedObjects[statement.Property];
+
       return new SemWeb.Statement(
-        Translate(statement.Subject),
-        Translate(statement.Predicate),
-        Translate(statement.Property));
-    }
-
-    private SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
-      if(l.RawData == null) return null;
+        subject,
+        predicate,
+        property);
+    }
+
+    private static SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
+      if (l.RawData == null) return null;
       return new SemWeb.Literal(l.RawData, null, "serializedItem");
     }
 
-    private SemWeb.Literal TranslateLiteral(Literal l) {
-      if(l.Value == null) return null;
-      if(l.Value is double) return SemWeb.Literal.FromValue((double)l.Value);
-      else if(l.Value is bool) return SemWeb.Literal.FromValue((bool)l.Value);
-      else if(l.Value is int) return SemWeb.Literal.FromValue((int)l.Value);
-      else if(l.Value is long) return SemWeb.Literal.FromValue((long)l.Value);
-      else if(l.Value is string) return SemWeb.Literal.FromValue((string)l.Value);
+    private static SemWeb.Literal TranslateLiteral(Literal l) {
+      if (l.Value == null) return null;
+      if (l.Value is double) return SemWeb.Literal.FromValue((double)l.Value);
+      else if (l.Value is bool) return SemWeb.Literal.FromValue((bool)l.Value);
+      else if (l.Value is int) return SemWeb.Literal.FromValue((int)l.Value);
+      else if (l.Value is long) return SemWeb.Literal.FromValue((long)l.Value);
+      else if (l.Value is string) return SemWeb.Literal.FromValue((string)l.Value);
       else return new SemWeb.Literal(l.Value.ToString());
     }
 
-    private Resource TranslateLiteral(SemWeb.Literal l) {
-      if(l.DataType == "serializedItem") {
+    private static Resource TranslateLiteral(SemWeb.Literal l) {
+      if (l.DataType == "serializedItem") {
         return new SerializedLiteral(l.Value);
-      } else if(l.DataType != null) {
+      } else if (l.DataType != null) {
         return new Literal(l.ParseValue());
       } else {
@@ -146,4 +200,27 @@
       }
     }
+
+    private class MyQueryResultSink : SemWeb.Query.QueryResultSink {
+
+      private List<VariableBindings> bindings = new List<VariableBindings>();
+      public ICollection<VariableBindings> Bindings {
+        get { return bindings.AsReadOnly(); }
+      }
+
+      public override bool Add(SemWeb.Query.VariableBindings result) {
+        VariableBindings varBindings = new VariableBindings();
+        foreach (SemWeb.Variable var in result.Variables) {
+          if (var.LocalName != null && result[var] != null) {
+            if (result[var] is SemWeb.Literal) {
+              varBindings.Add(var.LocalName, TranslateLiteral((SemWeb.Literal)result[var]));
+            } else {
+              varBindings.Add(var.LocalName, new Entity(((SemWeb.Entity)result[var]).Uri));
+            }
+          }
+          bindings.Add(varBindings);
+        }
+        return true;
+      }
+    }
   }
 }
Index: trunk/sources/HeuristicLab.CEDMA.Server/DispatcherBase.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/DispatcherBase.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Server/DispatcherBase.cs	(revision 1287)
@@ -0,0 +1,209 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public abstract class DispatcherBase : IDispatcher {
+    public enum ModelComplexity { Low, Medium, High };
+    public enum Algorithm { StandardGpRegression, OffspringGpRegression, StandardGpClassification, OffspringGpClassification, StandardGpForecasting, OffspringGpForecasting };
+
+    private IStore store;
+    private ModelComplexity[] possibleComplexities = new ModelComplexity[] { ModelComplexity.Low, ModelComplexity.Medium, ModelComplexity.High };
+    private Dictionary<LearningTask, Algorithm[]> possibleAlgorithms = new Dictionary<LearningTask, Algorithm[]>() {
+      {LearningTask.Classification, new Algorithm[] { Algorithm.StandardGpClassification, Algorithm.OffspringGpClassification }},
+      {LearningTask.Regression, new Algorithm[] { Algorithm.StandardGpRegression, Algorithm.OffspringGpRegression }},
+      {LearningTask.TimeSeries, new Algorithm[] { Algorithm.StandardGpForecasting, Algorithm.OffspringGpForecasting }}
+    };
+
+    private static int MaxGenerations {
+      get { return 3; }
+    }
+
+    private static int MaxEvaluatedSolutions {
+      get { return 3000; }
+    }
+
+    public DispatcherBase(IStore store) {
+      this.store = store;
+    }
+
+    public Execution GetNextJob() {
+      // find and select a dataset
+      var dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
+      var dataSetQuery = new Statement[] {
+        new Statement(dataSetVar, Ontology.PredicateInstanceOf, Ontology.TypeDataSet)
+      };
+
+      Entity[] datasets = store.Query("?DataSet <" + Ontology.PredicateInstanceOf.Uri + "> <" + Ontology.TypeDataSet.Uri + "> .")
+        .Select(x => (Entity)x.Get("DataSet"))
+        .ToArray();
+
+      // no datasets => do nothing
+      if (datasets.Length == 0) return null;
+
+      Entity dataSetEntity = SelectDataSet(datasets);
+      DataSet dataSet = new DataSet(store, dataSetEntity);
+
+      int targetVariable = SelectTargetVariable(dataSet, dataSet.Problem.AllowedTargetVariables.ToArray());
+      Algorithm selectedAlgorithm = SelectAlgorithm(dataSet, targetVariable, possibleAlgorithms[dataSet.Problem.LearningTask]);
+      string targetVariableName = dataSet.Problem.GetVariableName(targetVariable);
+      ModelComplexity selectedComplexity = SelectComplexity(dataSet, targetVariable, selectedAlgorithm, possibleComplexities);
+
+      Execution exec = CreateExecution(dataSet.Problem, targetVariable, selectedAlgorithm, selectedComplexity);
+      if (exec != null) {
+        exec.DataSetEntity = dataSetEntity;
+        exec.TargetVariable = targetVariableName;
+      }
+      return exec;
+    }
+
+    public abstract Entity SelectDataSet(Entity[] datasets);
+    public abstract int SelectTargetVariable(DataSet dataSet, int[] targetVariables);
+    public abstract Algorithm SelectAlgorithm(DataSet dataSet, int targetVariable, Algorithm[] possibleAlgorithms);
+    public abstract ModelComplexity SelectComplexity(DataSet dataSet, int targetVariable, Algorithm algorithm, ModelComplexity[] possibleComplexities);
+
+    private Execution CreateExecution(Problem problem, int targetVariable, Algorithm algorithm, ModelComplexity complexity) {
+      switch (algorithm) {
+        case Algorithm.StandardGpRegression: {
+            var algo = new HeuristicLab.GP.StructureIdentification.StandardGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.PopulationSize = 10000;
+            algo.MaxGenerations = MaxGenerations;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "StandardGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.OffspringGpRegression: {
+            var algo = new HeuristicLab.GP.StructureIdentification.OffspringSelectionGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "OffspringGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.StandardGpClassification: {
+            var algo = new HeuristicLab.GP.StructureIdentification.Classification.StandardGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.PopulationSize = 10000;
+            algo.MaxGenerations = MaxGenerations;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "StandardGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.OffspringGpClassification: {
+            var algo = new HeuristicLab.GP.StructureIdentification.Classification.OffspringSelectionGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "OffspringGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.StandardGpForecasting: {
+            var algo = new HeuristicLab.GP.StructureIdentification.TimeSeries.StandardGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.PopulationSize = 10000;
+            algo.MaxGenerations = MaxGenerations;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "StandardGP - Complexity: " + complexity;
+            return exec;
+          }
+        case Algorithm.OffspringGpForecasting: {
+            var algo = new HeuristicLab.GP.StructureIdentification.TimeSeries.OffspringSelectionGP();
+            SetComplexityParameters(algo, complexity);
+            SetProblemParameters(algo, problem, targetVariable);
+            algo.MaxEvaluatedSolutions = MaxEvaluatedSolutions;
+            Execution exec = new Execution(algo.Engine);
+            exec.Description = "OffspringGP - Complexity: " + complexity;
+            return exec;
+          }
+        default: {
+            return null;
+          }
+      }
+    }
+
+    private void SetComplexityParameters(AlgorithmBase algo, ModelComplexity complexity) {
+      switch (complexity) {
+        case ModelComplexity.Low: {
+            algo.MaxTreeHeight = 5;
+            algo.MaxTreeSize = 20;
+            break;
+          }
+        case ModelComplexity.Medium: {
+            algo.MaxTreeHeight = 10;
+            algo.MaxTreeSize = 100;
+            break;
+          }
+        case ModelComplexity.High: {
+            algo.MaxTreeHeight = 12;
+            algo.MaxTreeSize = 200;
+            break;
+          }
+      }
+    }
+
+    private void SetProblemParameters(AlgorithmBase algo, Problem problem, int targetVariable) {
+      algo.ProblemInjector.GetVariable("Dataset").Value = problem.DataSet;
+      algo.ProblemInjector.GetVariable("TargetVariable").GetValue<IntData>().Data = targetVariable;
+      algo.ProblemInjector.GetVariable("TrainingSamplesStart").GetValue<IntData>().Data = problem.TrainingSamplesStart;
+      algo.ProblemInjector.GetVariable("TrainingSamplesEnd").GetValue<IntData>().Data = problem.TrainingSamplesEnd;
+      algo.ProblemInjector.GetVariable("ValidationSamplesStart").GetValue<IntData>().Data = problem.ValidationSamplesStart;
+      algo.ProblemInjector.GetVariable("ValidationSamplesEnd").GetValue<IntData>().Data = problem.ValidationSamplesEnd;
+      algo.ProblemInjector.GetVariable("TestSamplesStart").GetValue<IntData>().Data = problem.TestSamplesStart;
+      algo.ProblemInjector.GetVariable("TestSamplesEnd").GetValue<IntData>().Data = problem.TestSamplesEnd;
+      ItemList<IntData> allowedFeatures = algo.ProblemInjector.GetVariable("AllowedFeatures").GetValue<ItemList<IntData>>();
+      foreach (int allowedFeature in problem.AllowedInputVariables) allowedFeatures.Add(new IntData(allowedFeature));
+
+      if (problem.LearningTask == LearningTask.TimeSeries) {
+        algo.ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = problem.AutoRegressive;
+        algo.ProblemInjector.GetVariable("MinTimeOffset").GetValue<IntData>().Data = problem.MinTimeOffset;
+        algo.ProblemInjector.GetVariable("MaxTimeOffset").GetValue<IntData>().Data = problem.MaxTimeOffset;
+      } else if (problem.LearningTask == LearningTask.Classification) {
+        ItemList<DoubleData> classValues = algo.ProblemInjector.GetVariable("TargetClassValues").GetValue<ItemList<DoubleData>>();
+        foreach (double classValue in GetDifferentClassValues(problem.DataSet, targetVariable)) classValues.Add(new DoubleData(classValue));
+      }
+    }
+
+    private IEnumerable<double> GetDifferentClassValues(HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable) {
+      return Enumerable.Range(0, dataset.Rows).Select(x => dataset.GetValue(x, targetVariable)).Distinct();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Server/Executer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/Executer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Server/Executer.cs	(revision 1287)
@@ -0,0 +1,181 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Grid;
+using System.Diagnostics;
+using HeuristicLab.Core;
+using System.Threading;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class Executer {
+    private IDispatcher dispatcher;
+    private JobManager jobManager;
+    private IStore store;
+    private Dictionary<WaitHandle, Execution> activeExecutions;
+
+    private TimeSpan StartJobInterval {
+      get { return TimeSpan.FromMilliseconds(500); }
+    }
+
+    private TimeSpan WaitForFinishedJobsTimeout {
+      get { return TimeSpan.FromMilliseconds(100); }
+    }
+
+    private int maxActiveJobs;
+    public int MaxActiveJobs {
+      get { return maxActiveJobs; }
+      set {
+        if (value < 0) throw new ArgumentException("Only positive values are allowed for MaxActiveJobs");
+        maxActiveJobs = value;
+      }
+    }
+
+    public Executer(IDispatcher dispatcher, IStore store, string gridUrl) {
+      activeExecutions = new Dictionary<WaitHandle, Execution>();
+      maxActiveJobs = 10;
+      this.dispatcher = dispatcher;
+      this.store = store;
+      this.jobManager = new JobManager(gridUrl);
+      jobManager.Reset();
+    }
+
+    internal void Start() {
+      new Thread(StartJobs).Start();
+    }
+
+    private void StartJobs() {
+      List<WaitHandle> wh = new List<WaitHandle>();
+      Dictionary<WaitHandle, AtomicOperation> activeOperations = new Dictionary<WaitHandle, AtomicOperation>();
+      while (true) {
+        try {
+          // start new jobs as long as there are less than MaxActiveJobs 
+          while (wh.Count < MaxActiveJobs) {
+            Thread.Sleep(StartJobInterval);
+            // get an execution from the dispatcher and execute in grid via job-manager
+            Execution execution = dispatcher.GetNextJob();
+            if (execution != null) {
+              AtomicOperation op = new AtomicOperation(execution.Engine.OperatorGraph.InitialOperator, execution.Engine.GlobalScope);
+              WaitHandle opWh = jobManager.BeginExecuteOperation(execution.Engine.GlobalScope, op);
+              wh.Add(opWh);
+              activeOperations.Add(opWh, op);
+              lock (activeExecutions) {
+                activeExecutions.Add(opWh, execution);
+              }
+            }
+          }
+          // wait until any job is finished
+          WaitHandle[] whArr = wh.ToArray();
+          int readyHandleIndex = WaitHandle.WaitAny(whArr, WaitForFinishedJobsTimeout);
+          if (readyHandleIndex != WaitHandle.WaitTimeout) {
+            WaitHandle readyHandle = whArr[readyHandleIndex];
+            AtomicOperation finishedOp = activeOperations[readyHandle];
+            wh.Remove(readyHandle);
+            Execution finishedExecution = null;
+            lock (activeExecutions) {
+              finishedExecution = activeExecutions[readyHandle];
+              activeExecutions.Remove(readyHandle);
+            }
+            activeOperations.Remove(readyHandle);
+            ProcessingEngine finishedEngine = null;
+            try {
+              finishedEngine = jobManager.EndExecuteOperation(finishedOp);
+            }
+            catch (Exception badEx) {
+              Trace.WriteLine("CEDMA Executer: Exception in job execution thread. " + badEx.Message);
+            }
+            if (finishedEngine != null) {
+              StoreResults(finishedExecution, finishedEngine);
+            }
+          }
+        }
+        catch (Exception ex) {
+          Trace.WriteLine("CEDMA Executer: Exception in job-management thread. " + ex.Message);
+        }
+      }
+    }
+
+    private void StoreResults(Execution finishedExecution, ProcessingEngine finishedEngine) {
+      Entity model = new Entity(Ontology.CedmaNameSpace + Guid.NewGuid());
+      store.Add(new Statement(model, Ontology.PredicateInstanceOf, Ontology.TypeGeneticProgrammingFunctionTree));
+      store.Add(new Statement(finishedExecution.DataSetEntity, Ontology.PredicateHasModel, model));
+      StoreModelAttribute(model, Ontology.TargetVariable, finishedExecution.TargetVariable);
+      Scope bestModelScope = finishedEngine.GlobalScope.GetVariableValue<Scope>("BestValidationSolution", false);
+      StoreModelVariable(model, Ontology.TrainingMeanSquaredError, bestModelScope, "Quality");
+      StoreModelVariable(model, Ontology.ValidationMeanSquaredError, bestModelScope, "ValidationQuality");
+      StoreModelVariable(model, Ontology.TestMeanSquaredError, bestModelScope, "TestQuality");
+      StoreModelVariable(model, Ontology.TrainingMeanAbsolutePercentageError, bestModelScope, "TrainingMAPE");
+      StoreModelVariable(model, Ontology.ValidationMeanAbsolutePercentageError, bestModelScope, "ValidationMAPE");
+      StoreModelVariable(model, Ontology.TestMeanAbsolutePercentageError, bestModelScope, "TestMAPE");
+      StoreModelVariable(model, Ontology.TrainingMeanAbsolutePercentageOfRangeError, bestModelScope, "TrainingMAPRE");
+      StoreModelVariable(model, Ontology.ValidationMeanAbsolutePercentageOfRangeError, bestModelScope, "ValidationMAPRE");
+      StoreModelVariable(model, Ontology.TestMeanAbsolutePercentageOfRangeError, bestModelScope, "TestMAPRE");
+      StoreModelVariable(model, Ontology.TrainingCoefficientOfDetermination, bestModelScope, "TrainingR2");
+      StoreModelVariable(model, Ontology.ValidationCoefficientOfDetermination, bestModelScope, "ValidationR2");
+      StoreModelVariable(model, Ontology.TestCoefficientOfDetermination, bestModelScope, "TestR2");
+      StoreModelVariable(model, Ontology.TrainingTheilsInequalityCoefficient, bestModelScope, "TrainingTheilInequalityCoefficient");
+      StoreModelVariable(model, Ontology.ValidationTheilsInequalityCoefficient, bestModelScope, "ValidationTheilInequalityCoefficient");
+      StoreModelVariable(model, Ontology.TestTheilsInequalityCoefficient, bestModelScope, "TestTheilInequalityCoefficient");
+      StoreModelVariable(model, Ontology.TrainingAccuracy, bestModelScope, "TrainingAccuracy");
+      StoreModelVariable(model, Ontology.ValidationAccuracy, bestModelScope, "ValidationAccuracy");
+      StoreModelVariable(model, Ontology.TestAccuracy, bestModelScope, "TestAccuracy");
+      StoreModelVariable(model, Ontology.TreeSize, bestModelScope, "TreeSize");
+      StoreModelVariable(model, Ontology.TreeHeight, bestModelScope, "TreeHeight");
+      StoreModelVariable(model, Ontology.EvaluatedSolutions, bestModelScope, "EvaluatedSolutions");
+
+      byte[] serializedModel = PersistenceManager.SaveToGZip(bestModelScope.GetVariableValue("FunctionTree", false));
+      store.Add(new Statement(model, Ontology.PredicateSerializedData, new Literal(Convert.ToBase64String(serializedModel))));
+    }
+
+    private void StoreModelVariable(Entity model, Entity entity, Scope scope, string variableName) {
+      if (scope.GetVariable(variableName) != null)
+        StoreModelAttribute(model, entity, scope.GetVariableValue<ObjectData>(variableName, false).Data);
+    }
+
+    private void StoreModelAttribute(Entity model, Entity predicate, object value) {
+      store.Add(new Statement(model, predicate, new Literal(value)));
+    }
+
+    internal string[] GetJobs() {
+      lock (activeExecutions) {
+        string[] retVal = new string[activeExecutions.Count];
+        int i = 0;
+        foreach (Execution e in activeExecutions.Values) {
+          retVal[i++] = "Target-Variable: " + e.TargetVariable + " " + e.Description;
+        }
+        return retVal;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Server/Execution.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/Execution.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Server/Execution.cs	(revision 1287)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Grid;
+using System.Diagnostics;
+using HeuristicLab.Core;
+using System.Threading;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class Execution {
+    private Entity dataSetEntity;
+    public Entity DataSetEntity {
+      get { return dataSetEntity; }
+      set { dataSetEntity = value; }
+    }
+
+    private IEngine engine;
+    public IEngine Engine {
+      get { return engine; }
+      set { engine = value; }
+    }
+
+    private string targetVariable;
+    public string TargetVariable {
+      get { return targetVariable; }
+      set { targetVariable = value; }
+    }
+
+    private string description;
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    public Execution(IEngine engine) {
+      this.engine = engine;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 1287)
@@ -75,5 +75,10 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="RunScheduler.cs" />
+    <Compile Include="DispatcherBase.cs" />
+    <Compile Include="IDispatcher.cs" />
+    <Compile Include="Execution.cs" />
+    <Compile Include="Executer.cs" />
+    <Compile Include="RandomDispatcher.cs" />
+    <Compile Include="Server.cs" />
     <Compile Include="ServerApplication.cs" />
     <Compile Include="HeuristicLabCedmaServerPlugin.cs" />
@@ -103,7 +108,23 @@
       <Name>HeuristicLab.Core</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
       <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
       <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification.Classification\HeuristicLab.GP.StructureIdentification.Classification.csproj">
+      <Project>{7C20D100-8BEB-433A-9499-F075E2CB9297}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification.Classification</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification.TimeSeries\HeuristicLab.GP.StructureIdentification.TimeSeries.csproj">
+      <Project>{6084CFB5-733F-449D-9F92-2E40D13F0514}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification.TimeSeries</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification\HeuristicLab.GP.StructureIdentification.csproj">
+      <Project>{74223A32-C726-4978-BE78-37113A18373C}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Grid\HeuristicLab.Grid.csproj">
Index: trunk/sources/HeuristicLab.CEDMA.Server/IDispatcher.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/IDispatcher.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Server/IDispatcher.cs	(revision 1287)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public interface IDispatcher {
+    Execution GetNextJob();
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Server/RandomDispatcher.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/RandomDispatcher.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Server/RandomDispatcher.cs	(revision 1287)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+using System.Linq;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class RandomDispatcher : DispatcherBase {
+    private Random random;
+    public RandomDispatcher(IStore store)
+      : base(store) {
+      random = new Random();
+    }
+
+    public override Algorithm SelectAlgorithm(DataSet dataSet, int targetVariable, Algorithm[] possibleAlgorithms) {
+      return possibleAlgorithms[random.Next(possibleAlgorithms.Length)];
+    }
+
+    public override ModelComplexity SelectComplexity(DataSet dataSet, int targetVariable, Algorithm algorithm, ModelComplexity[] possibleComplexities) {
+      return possibleComplexities[random.Next(possibleComplexities.Length)];
+    }
+
+    public override Entity SelectDataSet(Entity[] datasets) {
+      return datasets[random.Next(datasets.Length)];
+    }
+
+    public override int SelectTargetVariable(DataSet dataSet, int[] targetVariables) {
+      return targetVariables[random.Next(targetVariables.Length)];
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Server/RunScheduler.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/RunScheduler.cs	(revision 1286)
+++ 	(revision )
@@ -1,165 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.CEDMA.DB;
-using HeuristicLab.CEDMA.DB.Interfaces;
-using HeuristicLab.Core;
-using System.Threading;
-using HeuristicLab.Grid;
-using System.Diagnostics;
-using HeuristicLab.Data;
-using HeuristicLab.CEDMA.Core;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.CEDMA.Server {
-  public class RunScheduler {
-    private class Job {
-      public long AgentId;
-      public WaitHandle WaitHandle;
-      public AtomicOperation Operation;
-    }
-    private string serverUri;
-    private Database database;
-    private JobManager jobManager;
-    private const int RELEASE_INTERVAL = 5;
-    private object remoteCommLock = new object();
-    private object queueLock = new object();
-    private Queue<Job> jobQueue;
-    private AutoResetEvent runningJobs = new AutoResetEvent(false);
-
-    public RunScheduler(Database database, JobManager jobManager, string serverUri) {
-      this.database = database;
-      this.jobManager = jobManager;
-      this.serverUri = serverUri;
-      jobQueue = new Queue<Job>();
-      Thread resultsGatheringThread = new Thread(GatherResults);
-      resultsGatheringThread.Start();
-    }
-    public void Run() {
-      while(true) {
-        ReleaseWaitingRuns();
-        Thread.Sleep(TimeSpan.FromSeconds(RELEASE_INTERVAL));
-      }
-    }
-    private void ReleaseWaitingRuns() {
-      ICollection<AgentEntry> agents;
-      lock(remoteCommLock) {
-        agents = database.GetAgents(ProcessStatus.Waiting);
-      }
-      foreach(AgentEntry entry in agents) {
-        Scope scope = new Scope();
-        // initialize CEDMA variables for the execution of the agent
-        scope.AddVariable(new Variable("AgentId", new IntData((int)entry.Id)));
-        scope.AddVariable(new Variable("CedmaServerUri", new StringData(serverUri)));
-
-        byte[] rawData = database.GetAgentRawData(entry.Id);
-        IOperatorGraph opGraph = (IOperatorGraph)PersistenceManager.RestoreFromGZip(rawData);
-
-        PatchLinks(opGraph, new Dictionary<long, IOperator>());
-
-        AtomicOperation operation = new AtomicOperation(opGraph.InitialOperator, scope);
-        WaitHandle wHandle;
-        lock(remoteCommLock) {
-          wHandle = jobManager.BeginExecuteOperation(operation.Scope, operation);
-          database.UpdateAgent(entry.Id, ProcessStatus.Active);
-        }
-
-        Job job = new Job();
-        job.AgentId = entry.Id;
-        job.Operation = operation;
-        job.WaitHandle = wHandle;
-
-        lock(queueLock) {
-          jobQueue.Enqueue(job);
-          runningJobs.Set();
-        }
-      }
-    }
-
-    private void PatchLinks(IOperatorGraph opGraph, Dictionary<long, IOperator> patchedOperators) {
-      Dictionary<IOperator, IOperator> patchDictionary = new Dictionary<IOperator, IOperator>();
-      foreach(IOperator op in opGraph.Operators) {
-        IOperator patched = PatchLinks(op, patchedOperators);
-        patchDictionary.Add(op, patched);
-      }
-      foreach(KeyValuePair<IOperator, IOperator> p in patchDictionary) {
-        IOperator original = p.Key;
-        IOperator patch = p.Value;
-        if(original != patch) {
-          foreach(IOperator subOperator in original.SubOperators) {
-            patch.AddSubOperator(subOperator);
-          }
-          if(opGraph.InitialOperator == original)
-            opGraph.InitialOperator = patch;
-          opGraph.RemoveOperator(original.Guid);
-          opGraph.AddOperator(patch);
-        }
-      }
-    }
-
-    private IOperator PatchLinks(IOperator op, Dictionary<long, IOperator> patchedOperators) {
-      if(op is OperatorLink) {
-        OperatorLink link = op as OperatorLink;
-        if(patchedOperators.ContainsKey(link.Id)) {
-          return patchedOperators[link.Id];
-        } else {
-          OperatorEntry targetEntry = database.GetOperator(link.Id);
-          IOperator target = (IOperator)PersistenceManager.RestoreFromGZip(targetEntry.RawData);
-          patchedOperators.Add(link.Id, target);
-          PatchLinks(target, patchedOperators);
-          return target;
-        }
-      } else if(op is CombinedOperator) {
-        PatchLinks(((CombinedOperator)op).OperatorGraph, patchedOperators);
-        return op;
-      }
-      return op;
-    }
-
-    private void GatherResults() {
-      try {
-        while(true) {
-          Job job = null;
-          lock(queueLock) if(jobQueue.Count > 0) job = jobQueue.Dequeue();
-          if(job == null) runningJobs.WaitOne();
-          else {
-            job.WaitHandle.WaitOne();
-            job.WaitHandle.Close();
-            lock(remoteCommLock) {
-              try {
-                jobManager.EndExecuteOperation(job.Operation);
-                database.UpdateAgent(job.AgentId, ProcessStatus.Finished);
-              } catch(JobExecutionException ex) {
-                database.UpdateAgent(job.AgentId, ProcessStatus.Error);
-              }
-            }
-          }
-        }
-      } finally {
-        Debug.Assert(false); // make sure we are notified when this thread is killed while debugging
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.CEDMA.Server/Server.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/Server.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.CEDMA.Server/Server.cs	(revision 1287)
@@ -0,0 +1,86 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.DB;
+using System.ServiceModel.Description;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class Server {
+    private ServiceHost host;
+    private IStore store;
+
+    private string gridServiceUrl;
+
+    public string GridServiceUrl {
+      get { return gridServiceUrl; }
+      set { gridServiceUrl = value; }
+    }
+
+    private string cedmaServiceUrl;
+
+    public string CedmaServiceUrl {
+      get { return cedmaServiceUrl; }
+      set { cedmaServiceUrl = value; }
+    }
+
+    public Server(IStore store) {
+      IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
+      // windows XP returns the external ip on index 0 while windows vista returns the external ip as one of the last entries
+      // also if IPv6 protocol is installed we want to find an entry that is IPv4
+      int index = 0;
+      if (System.Environment.OSVersion.Version.Major >= 6) {
+        for (index = addresses.Length - 1; index >= 0; index--)
+          if (addresses[index].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
+            break;
+      }
+      cedmaServiceUrl = "net.tcp://" + addresses[index] + ":8002/CEDMA";
+      this.store = store;
+    }
+
+    public void Start() {
+      host = new ServiceHost(store, new Uri(cedmaServiceUrl));
+      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
+      throttlingBehavior.MaxConcurrentSessions = 20;
+      host.Description.Behaviors.Add(throttlingBehavior);
+      try {
+        NetTcpBinding binding = new NetTcpBinding();
+        binding.SendTimeout = new TimeSpan(1, 0, 0);
+        binding.MaxReceivedMessageSize = 1000000000; // 100Mbytes
+        binding.ReaderQuotas.MaxStringContentLength = 1000000000; // also 100M chars
+        binding.ReaderQuotas.MaxArrayLength = 1000000000; // also 100M elements;
+        host.AddServiceEndpoint(typeof(IStore), binding, cedmaServiceUrl);
+        host.Open();
+      }
+      catch (CommunicationException ex) {
+        MessageBox.Show("An exception occurred: " + ex.Message);
+        host.Abort();
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 1287)
@@ -42,77 +42,36 @@
 namespace HeuristicLab.CEDMA.Server {
   public partial class ServerForm : Form {
-    private ServiceHost host;
-    private ServiceHost rdfHost;
-    private Database database;
+    private Server server;
     private Store store;
-    private static readonly string dbFile = AppDomain.CurrentDomain.BaseDirectory + "/test.db3";
-    private static readonly string connectionString = "Data Source=\"" + dbFile + "\";Pooling=False";
+    private IDispatcher dispatcher;
+    private Executer executer;
+
     private static readonly string rdfFile = AppDomain.CurrentDomain.BaseDirectory + "rdf_store.db3";
     private static readonly string rdfConnectionString = "sqlite:rdf:Data Source=\"" + rdfFile + "\"";
+
     public ServerForm() {
       InitializeComponent();
-      // windows XP returns the external ip on index 0 while windows vista returns the external ip on index 2
-      if(System.Environment.OSVersion.Version.Major >= 6) {
-        addressTextBox.Text = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[2] + ":8002/CEDMA/World";
-      } else {
-        addressTextBox.Text = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[0] + ":8002/CEDMA/World";
-      }
+      store = new Store(rdfConnectionString);
+      server = new Server(store);
+      server.Start();
+      addressTextBox.Text = server.CedmaServiceUrl;
     }
 
-    private void InitRunScheduler() {
-      JobManager jobManager = new JobManager(gridAddress.Text);
-      jobManager.Reset();
-      RunScheduler scheduler = new RunScheduler(database, jobManager, addressTextBox.Text);
-      Thread runSchedulerThread = new Thread(scheduler.Run);
-      runSchedulerThread.Start();
+    private void refreshTimer_Tick(object sender, EventArgs e) {
+      listBox.DataSource = executer.GetJobs();
     }
 
-    private void InitDatabase() {
-      DbProviderFactory fact;
-      fact = DbProviderFactories.GetFactory("System.Data.SQLite");
-      if(!System.IO.File.Exists(dbFile)) {
-        database = new Database(connectionString);
-        database.CreateNew();
-      } else {
-        database = new Database(connectionString);
-      }
+    private void connectButton_Click(object sender, EventArgs e) {
+      dispatcher = new RandomDispatcher(store);
+      executer = new Executer(dispatcher, store, gridAddress.Text);
+      executer.Start();
+      maxActiveJobsUpDown.Enabled = true;
+      maxActiveJobsUpDown.Value = executer.MaxActiveJobs;
+      connectButton.Enabled = false;
+      refreshTimer.Start();
     }
 
-    private void InitRdfStore() {
-      store = new Store(rdfConnectionString);
-    }
-
-    private void Start() {
-      InitDatabase();
-      InitRdfStore();
-      InitRunScheduler();
-
-      host = new ServiceHost(database, new Uri(addressTextBox.Text));
-      rdfHost = new ServiceHost(store, new Uri(addressTextBox.Text+"/RdfStore"));
-      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
-      throttlingBehavior.MaxConcurrentSessions = 20;
-      host.Description.Behaviors.Add(throttlingBehavior);
-      rdfHost.Description.Behaviors.Add(throttlingBehavior);
-      try {
-        NetTcpBinding binding = new NetTcpBinding();
-        binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
-        binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
-        binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
-        binding.Security.Mode = SecurityMode.None;
-
-        host.AddServiceEndpoint(typeof(IDatabase), binding, addressTextBox.Text);
-        host.Open();
-        rdfHost.AddServiceEndpoint(typeof(IStore), binding, addressTextBox.Text+"/RdfStore");
-        rdfHost.Open();
-      } catch(CommunicationException ex) {
-        MessageBox.Show("An exception occurred: " + ex.Message);
-        host.Abort();
-        rdfHost.Abort();
-      }
-    }
-
-    private void startButton_Click(object sender, EventArgs e) {
-      Start();
-      startButton.Enabled = false;
+    private void maxActiveJobsUpDown_ValueChanged(object sender, EventArgs e) {
+      executer.MaxActiveJobs = Convert.ToInt32(maxActiveJobsUpDown.Value);
     }
   }
Index: trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.designer.cs
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.designer.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.designer.cs	(revision 1287)
@@ -45,11 +45,15 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.addressTextBox = new System.Windows.Forms.TextBox();
       this.externalAddressLabel = new System.Windows.Forms.Label();
-      this.activeAgentsLabel = new System.Windows.Forms.Label();
-      this.activeAgentsTextBox = new System.Windows.Forms.TextBox();
       this.gridAddressLabel = new System.Windows.Forms.Label();
       this.gridAddress = new System.Windows.Forms.TextBox();
-      this.startButton = new System.Windows.Forms.Button();
+      this.connectButton = new System.Windows.Forms.Button();
+      this.listBox = new System.Windows.Forms.ListBox();
+      this.refreshTimer = new System.Windows.Forms.Timer(this.components);
+      this.maxActiveJobsUpDown = new System.Windows.Forms.NumericUpDown();
+      this.label1 = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.maxActiveJobsUpDown)).BeginInit();
       this.SuspendLayout();
       // 
@@ -71,23 +75,4 @@
       this.externalAddressLabel.Text = "&Address:";
       // 
-      // activeAgentsLabel
-      // 
-      this.activeAgentsLabel.AutoSize = true;
-      this.activeAgentsLabel.Location = new System.Drawing.Point(12, 61);
-      this.activeAgentsLabel.Name = "activeAgentsLabel";
-      this.activeAgentsLabel.Size = new System.Drawing.Size(75, 13);
-      this.activeAgentsLabel.TabIndex = 7;
-      this.activeAgentsLabel.Text = "A&ctive agents:";
-      // 
-      // activeAgentsTextBox
-      // 
-      this.activeAgentsTextBox.Location = new System.Drawing.Point(106, 58);
-      this.activeAgentsTextBox.Name = "activeAgentsTextBox";
-      this.activeAgentsTextBox.ReadOnly = true;
-      this.activeAgentsTextBox.Size = new System.Drawing.Size(90, 20);
-      this.activeAgentsTextBox.TabIndex = 6;
-      this.activeAgentsTextBox.Text = "0";
-      this.activeAgentsTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
-      // 
       // gridAddressLabel
       // 
@@ -103,16 +88,56 @@
       this.gridAddress.Location = new System.Drawing.Point(106, 32);
       this.gridAddress.Name = "gridAddress";
-      this.gridAddress.Size = new System.Drawing.Size(229, 20);
+      this.gridAddress.Size = new System.Drawing.Size(160, 20);
       this.gridAddress.TabIndex = 8;
       // 
-      // startButton
+      // connectButton
       // 
-      this.startButton.Location = new System.Drawing.Point(15, 84);
-      this.startButton.Name = "startButton";
-      this.startButton.Size = new System.Drawing.Size(75, 23);
-      this.startButton.TabIndex = 10;
-      this.startButton.Text = "Start";
-      this.startButton.UseVisualStyleBackColor = true;
-      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      this.connectButton.Location = new System.Drawing.Point(272, 30);
+      this.connectButton.Name = "connectButton";
+      this.connectButton.Size = new System.Drawing.Size(75, 23);
+      this.connectButton.TabIndex = 10;
+      this.connectButton.Text = "Connect";
+      this.connectButton.UseVisualStyleBackColor = true;
+      this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
+      // 
+      // listBox
+      // 
+      this.listBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.listBox.FormattingEnabled = true;
+      this.listBox.Location = new System.Drawing.Point(12, 84);
+      this.listBox.Name = "listBox";
+      this.listBox.Size = new System.Drawing.Size(350, 251);
+      this.listBox.TabIndex = 11;
+      // 
+      // refreshTimer
+      // 
+      this.refreshTimer.Interval = 1000;
+      this.refreshTimer.Tick += new System.EventHandler(this.refreshTimer_Tick);
+      // 
+      // maxActiveJobsUpDown
+      // 
+      this.maxActiveJobsUpDown.Enabled = false;
+      this.maxActiveJobsUpDown.Location = new System.Drawing.Point(106, 59);
+      this.maxActiveJobsUpDown.Maximum = new decimal(new int[] {
+            64,
+            0,
+            0,
+            0});
+      this.maxActiveJobsUpDown.Name = "maxActiveJobsUpDown";
+      this.maxActiveJobsUpDown.Size = new System.Drawing.Size(120, 20);
+      this.maxActiveJobsUpDown.TabIndex = 12;
+      this.maxActiveJobsUpDown.ValueChanged += new System.EventHandler(this.maxActiveJobsUpDown_ValueChanged);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Enabled = false;
+      this.label1.Location = new System.Drawing.Point(12, 61);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(84, 13);
+      this.label1.TabIndex = 13;
+      this.label1.Text = "&Max active jobs:";
       // 
       // ServerForm
@@ -120,14 +145,16 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(347, 119);
-      this.Controls.Add(this.startButton);
+      this.ClientSize = new System.Drawing.Size(374, 342);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.maxActiveJobsUpDown);
+      this.Controls.Add(this.listBox);
+      this.Controls.Add(this.connectButton);
       this.Controls.Add(this.gridAddressLabel);
       this.Controls.Add(this.gridAddress);
-      this.Controls.Add(this.activeAgentsLabel);
-      this.Controls.Add(this.activeAgentsTextBox);
       this.Controls.Add(this.externalAddressLabel);
       this.Controls.Add(this.addressTextBox);
       this.Name = "ServerForm";
-      this.Text = "Agent Server";
+      this.Text = "CEDMA Server";
+      ((System.ComponentModel.ISupportInitialize)(this.maxActiveJobsUpDown)).EndInit();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -139,9 +166,11 @@
     private System.Windows.Forms.TextBox addressTextBox;
     private System.Windows.Forms.Label externalAddressLabel;
-    private System.Windows.Forms.Label activeAgentsLabel;
-    private System.Windows.Forms.TextBox activeAgentsTextBox;
     private System.Windows.Forms.Label gridAddressLabel;
     private System.Windows.Forms.TextBox gridAddress;
-    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.Button connectButton;
+    private System.Windows.Forms.ListBox listBox;
+    private System.Windows.Forms.Timer refreshTimer;
+    private System.Windows.Forms.NumericUpDown maxActiveJobsUpDown;
+    private System.Windows.Forms.Label label1;
   }
 }
Index: trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.resx
===================================================================
--- trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.resx	(revision 1286)
+++ trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.resx	(revision 1287)
@@ -118,3 +118,6 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="refreshTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
Index: trunk/sources/HeuristicLab.DataAnalysis/Dataset.cs
===================================================================
--- trunk/sources/HeuristicLab.DataAnalysis/Dataset.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.DataAnalysis/Dataset.cs	(revision 1287)
@@ -52,5 +52,10 @@
     public int Columns {
       get { return columns; }
-      set { columns = value; }
+      set { 
+        columns = value;
+        if (variableNames == null || variableNames.Length != columns) {
+          variableNames = new string[columns];
+        }
+      }
     }
 
@@ -90,12 +95,8 @@
 
     private string[] variableNames;
-    public string[] VariableNames {
-      get { return variableNames; }
-      set { variableNames = value; }
-    }
 
     public Dataset() {
       Name = "-";
-      VariableNames = new string[] { "Var0" };
+      variableNames = new string[] { "Var0" };
       Columns = 1;
       Rows = 1;
@@ -114,4 +115,13 @@
       }
     }
+
+    public string GetVariableName(int variableIndex) {
+      return variableNames[variableIndex];
+    }
+
+    public void SetVariableName(int variableIndex, string name) {
+      variableNames[variableIndex] = name;
+    }
+
 
     public override IView CreateView() {
@@ -128,6 +138,6 @@
       clone.Samples = cloneSamples;
       clone.Name = Name;
-      clone.VariableNames = new string[VariableNames.Length];
-      Array.Copy(VariableNames, clone.VariableNames, VariableNames.Length);
+      clone.variableNames = new string[variableNames.Length];
+      Array.Copy(variableNames, clone.variableNames, variableNames.Length);
       Array.Copy(scalingFactor, clone.scalingFactor, columns);
       Array.Copy(scalingOffset, clone.scalingOffset, columns);
@@ -165,5 +175,5 @@
       columns = int.Parse(node.Attributes["Dimension2"].Value, CultureInfo.InvariantCulture.NumberFormat);
 
-      VariableNames = ParseVariableNamesString(node.Attributes["VariableNames"].Value);
+      variableNames = ParseVariableNamesString(node.Attributes["VariableNames"].Value);
       if(node.Attributes["ScalingFactors"] != null)
         scalingFactor = ParseDoubleString(node.Attributes["ScalingFactors"].Value);
Index: trunk/sources/HeuristicLab.DataAnalysis/DatasetShuffler.cs
===================================================================
--- trunk/sources/HeuristicLab.DataAnalysis/DatasetShuffler.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.DataAnalysis/DatasetShuffler.cs	(revision 1287)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.DataAnalysis {
+  public class DatasetShuffler : OperatorBase {
+    public DatasetShuffler()
+      : base() {
+      AddVariableInfo(new VariableInfo("Dataset", "Dataset which should be shuffled (random row order)", typeof(Dataset), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("Random", "Randomizer", typeof(MersenneTwister), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
+      MersenneTwister tw = GetVariableValue<MersenneTwister>("Random", scope, true);
+
+      for(int i = 0; i < dataset.Rows - 1; i++) {
+        int j = tw.Next(i, dataset.Rows);
+        ExchangeRows(dataset, i, j);
+      }
+
+      return null;
+    }
+
+    private void ExchangeRows(Dataset dataset, int i, int j) {
+      for(int k = 0; k < dataset.Columns; k++) {
+        double temp = dataset.GetValue(i, k);
+        dataset.SetValue(i, k, dataset.GetValue(j, k));
+        dataset.SetValue(j, k, temp);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.DataAnalysis/DatasetView.cs
===================================================================
--- trunk/sources/HeuristicLab.DataAnalysis/DatasetView.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.DataAnalysis/DatasetView.cs	(revision 1287)
@@ -135,6 +135,6 @@
 
     private string GetColumnName(int index) {
-      if(Dataset.VariableNames.Length == dataGridView.Columns.Count) {
-        return Dataset.VariableNames[index];
+      if(Dataset.Columns == dataGridView.Columns.Count) {
+        return Dataset.GetVariableName(index);
       } else {
         return "Var " + index;
Index: trunk/sources/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj
===================================================================
--- trunk/sources/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1287)
@@ -71,4 +71,5 @@
     <Compile Include="Dataset.cs" />
     <Compile Include="DatasetParser.cs" />
+    <Compile Include="DatasetShuffler.cs" />
     <Compile Include="DatasetView.cs">
       <SubType>UserControl</SubType>
@@ -97,7 +98,15 @@
       <Name>HeuristicLab.Data</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
       <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
     </ProjectReference>
   </ItemGroup>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs	(revision 1286)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.DataAnalysis;
-using HeuristicLab.Random;
-
-namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class DatasetShuffler : OperatorBase {
-    public DatasetShuffler()
-      : base() {
-      AddVariableInfo(new VariableInfo("Dataset", "Dataset which should be shuffled (random row order)", typeof(Dataset), VariableKind.In | VariableKind.Out));
-      AddVariableInfo(new VariableInfo("Random", "Randomizer", typeof(MersenneTwister), VariableKind.In));
-    }
-
-    public override IOperation Apply(IScope scope) {
-      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
-      MersenneTwister tw = GetVariableValue<MersenneTwister>("Random", scope, true);
-
-      for(int i = 0; i < dataset.Rows - 1; i++) {
-        int j = tw.Next(i, dataset.Rows);
-        ExchangeRows(dataset, i, j);
-      }
-
-      return null;
-    }
-
-    private void ExchangeRows(Dataset dataset, int i, int j) {
-      for(int k = 0; k < dataset.Columns; k++) {
-        double temp = dataset.GetValue(i, k);
-        dataset.SetValue(i, k, dataset.GetValue(j, k));
-        dataset.SetValue(j, k, temp);
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/FunctionLibraryInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/FunctionLibraryInjector.cs	(revision 1286)
+++ 	(revision )
@@ -1,209 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.DataAnalysis;
-using HeuristicLab.Constraints;
-using StructId = HeuristicLab.GP.StructureIdentification;
-
-namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class FunctionLibraryInjector : OperatorBase {
-    private const string TARGETVARIABLE = "TargetVariable";
-    private const string ALLOWEDFEATURES = "AllowedFeatures";
-    private const string FUNCTIONLIBRARY = "FunctionLibrary";
-
-    private StructId.Variable variable;
-    private GPOperatorLibrary operatorLibrary;
-
-    public override string Description {
-      get { return @"Injects a default function library for classification problems."; }
-    }
-
-    public FunctionLibraryInjector()
-      : base() {
-      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo(ALLOWEDFEATURES, "List of indexes of allowed features", typeof(ItemList<IntData>), VariableKind.In));
-      AddVariableInfo(new VariableInfo(FUNCTIONLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
-    }
-
-    public override IOperation Apply(IScope scope) {
-      ItemList<IntData> allowedFeatures = GetVariableValue<ItemList<IntData>>(ALLOWEDFEATURES, scope, true);
-      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
-
-      // remove the target-variable in case it occures in allowed features
-      List<IntData> ts = allowedFeatures.FindAll(d => d.Data == targetVariable);
-      foreach(IntData t in ts) allowedFeatures.Remove(t);
-
-      InitDefaultOperatorLibrary();
-
-      int[] allowedIndexes = new int[allowedFeatures.Count];
-      for(int i = 0; i < allowedIndexes.Length; i++) {
-        allowedIndexes[i] = allowedFeatures[i].Data;
-      }
-
-      variable.SetConstraints(allowedIndexes, 0, 0);
-
-      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(FUNCTIONLIBRARY), operatorLibrary));
-      return null;
-    }
-
-    private void InitDefaultOperatorLibrary() {
-      variable = new StructId.Variable();
-      StructId.Constant constant = new StructId.Constant();
-
-      StructId.Addition addition = new StructId.Addition();
-      StructId.And and = new StructId.And();
-      StructId.Average average = new StructId.Average();
-      StructId.Cosinus cosinus = new StructId.Cosinus();
-      StructId.Division division = new StructId.Division();
-      StructId.Equal equal = new StructId.Equal();
-      StructId.Exponential exponential = new StructId.Exponential();
-      StructId.GreaterThan greaterThan = new StructId.GreaterThan();
-      StructId.IfThenElse ifThenElse = new StructId.IfThenElse();
-      StructId.LessThan lessThan = new StructId.LessThan();
-      StructId.Logarithm logarithm = new StructId.Logarithm();
-      StructId.Multiplication multiplication = new StructId.Multiplication();
-      StructId.Not not = new StructId.Not();
-      StructId.Or or = new StructId.Or();
-      StructId.Power power = new StructId.Power();
-      StructId.Signum signum = new StructId.Signum();
-      StructId.Sinus sinus = new StructId.Sinus();
-      StructId.Sqrt sqrt = new StructId.Sqrt();
-      StructId.Subtraction subtraction = new StructId.Subtraction();
-      StructId.Tangens tangens = new StructId.Tangens();
-      StructId.Xor xor = new StructId.Xor();
-
-      IFunction[] booleanFunctions = new IFunction[] {
-        and,
-        equal,
-        greaterThan,
-        lessThan,
-        not,
-        or,
-        xor 
-      };
-      IFunction[] doubleFunctions = new IFunction[] {
-        variable,
-        constant,
-        addition,
-        average,
-        cosinus,
-        division,
-        exponential,
-        ifThenElse,
-        logarithm,
-        multiplication,
-        power,
-        signum,
-        sinus,
-        sqrt,
-        subtraction,
-        tangens
-      };
-
-      SetAllowedSubOperators(and, booleanFunctions);
-      SetAllowedSubOperators(equal, doubleFunctions);
-      SetAllowedSubOperators(greaterThan, doubleFunctions);
-      SetAllowedSubOperators(lessThan, doubleFunctions);
-      SetAllowedSubOperators(not, booleanFunctions);
-      SetAllowedSubOperators(or, booleanFunctions);
-      SetAllowedSubOperators(xor, booleanFunctions);
-      SetAllowedSubOperators(addition, doubleFunctions);
-      SetAllowedSubOperators(average, doubleFunctions);
-      SetAllowedSubOperators(cosinus, doubleFunctions);
-      SetAllowedSubOperators(division, doubleFunctions);
-      SetAllowedSubOperators(exponential, doubleFunctions);
-      SetAllowedSubOperators(ifThenElse, 0, booleanFunctions);
-      SetAllowedSubOperators(ifThenElse, 1, doubleFunctions);
-      SetAllowedSubOperators(ifThenElse, 2, doubleFunctions);
-      SetAllowedSubOperators(logarithm, doubleFunctions);
-      SetAllowedSubOperators(multiplication, doubleFunctions);
-      SetAllowedSubOperators(power, doubleFunctions);
-      SetAllowedSubOperators(signum, doubleFunctions);
-      SetAllowedSubOperators(sinus, doubleFunctions);
-      SetAllowedSubOperators(sqrt, doubleFunctions);
-      SetAllowedSubOperators(subtraction, doubleFunctions);
-      SetAllowedSubOperators(tangens, doubleFunctions);
-
-      operatorLibrary = new GPOperatorLibrary();
-      operatorLibrary.GPOperatorGroup.AddOperator(variable);
-      operatorLibrary.GPOperatorGroup.AddOperator(constant);
-      operatorLibrary.GPOperatorGroup.AddOperator(addition);
-      operatorLibrary.GPOperatorGroup.AddOperator(average);
-      operatorLibrary.GPOperatorGroup.AddOperator(and);
-      operatorLibrary.GPOperatorGroup.AddOperator(cosinus);
-      operatorLibrary.GPOperatorGroup.AddOperator(division);
-      operatorLibrary.GPOperatorGroup.AddOperator(equal);
-      operatorLibrary.GPOperatorGroup.AddOperator(exponential);
-      operatorLibrary.GPOperatorGroup.AddOperator(greaterThan);
-      operatorLibrary.GPOperatorGroup.AddOperator(ifThenElse);
-      operatorLibrary.GPOperatorGroup.AddOperator(lessThan);
-      operatorLibrary.GPOperatorGroup.AddOperator(logarithm);
-      operatorLibrary.GPOperatorGroup.AddOperator(multiplication);
-      operatorLibrary.GPOperatorGroup.AddOperator(not);
-      operatorLibrary.GPOperatorGroup.AddOperator(power);
-      operatorLibrary.GPOperatorGroup.AddOperator(or);
-      operatorLibrary.GPOperatorGroup.AddOperator(signum);
-      operatorLibrary.GPOperatorGroup.AddOperator(sinus);
-      operatorLibrary.GPOperatorGroup.AddOperator(sqrt);
-      operatorLibrary.GPOperatorGroup.AddOperator(subtraction);
-      operatorLibrary.GPOperatorGroup.AddOperator(tangens);
-      operatorLibrary.GPOperatorGroup.AddOperator(xor);
-    }
-
-    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
-      foreach(IConstraint c in f.Constraints) {
-        if(c is SubOperatorTypeConstraint) {
-          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
-          typeConstraint.Clear();
-          foreach(IFunction g in gs) {
-            typeConstraint.AddOperator(g);
-          }
-        } else if(c is AllSubOperatorsTypeConstraint) {
-          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
-          typeConstraint.Clear();
-          foreach(IFunction g in gs) {
-            typeConstraint.AddOperator(g);
-          }
-        }
-      }
-    }
-
-    private void SetAllowedSubOperators(IFunction f, int p, IFunction[] gs) {
-      foreach(IConstraint c in f.Constraints) {
-        if(c is SubOperatorTypeConstraint) {
-          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
-          if(typeConstraint.SubOperatorIndex.Data == p) {
-            typeConstraint.Clear();
-            foreach(IFunction g in gs) {
-              typeConstraint.AddOperator(g);
-            }
-          }
-        }
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1287)
@@ -67,15 +67,14 @@
     <Compile Include="ClassificationMeanSquaredErrorEvaluator.cs" />
     <Compile Include="ConfusionMatrixEvaluator.cs" />
-    <Compile Include="DatasetShuffler.cs" />
     <Compile Include="GPClassificationEvaluatorBase.cs" />
     <Compile Include="CrossValidation.cs" />
-    <Compile Include="FunctionLibraryInjector.cs">
-      <SubType>Code</SubType>
-    </Compile>
     <Compile Include="HeuristicLabGPClassificationPlugin.cs" />
     <Compile Include="MulticlassModeller.cs" />
     <Compile Include="MulticlassOneVsOneAnalyzer.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="ProblemInjector.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="ROCAnalyzer.cs" />
+    <Compile Include="StandardGP.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -103,4 +102,8 @@
       <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
       <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1287)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(StandardGP.BestSolutionProcessor);
+      return seq;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ProblemInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ProblemInjector.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ProblemInjector.cs	(revision 1287)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class ProblemInjector : HeuristicLab.GP.StructureIdentification.ProblemInjector {
+
+    public override string Description {
+      get {
+        return "Problem injector for classification structure identification.";
+      }
+    }
+
+    public ProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("TargetClassValues", "TargetClassValues", typeof(ItemList<DoubleData>), Core.VariableKind.New));
+      GetVariableInfo("TargetClassValues").Local = true;
+      AddVariable(new Core.Variable("TargetClassValues", new ItemList<DoubleData>()));
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1287)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
+
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(BestSolutionProcessor);
+      return seq;
+    }
+
+    internal static IOperator BestSolutionProcessor {
+      get {
+        SequentialProcessor seq = new SequentialProcessor();
+        AccuracyEvaluator trainingAccuracy = new AccuracyEvaluator();
+        trainingAccuracy.GetVariableInfo("Accuracy").ActualName = "TrainingAccuracy";
+        trainingAccuracy.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+        AccuracyEvaluator validationAccuracy = new AccuracyEvaluator();
+        validationAccuracy.GetVariableInfo("Accuracy").ActualName = "ValidationAccuracy";
+        validationAccuracy.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationAccuracy.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+        AccuracyEvaluator testAccuracy = new AccuracyEvaluator();
+        testAccuracy.GetVariableInfo("Accuracy").ActualName = "TestAccuracy";
+        testAccuracy.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+        ConfusionMatrixEvaluator trainingConfusionMatrix = new ConfusionMatrixEvaluator();
+        trainingConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TrainingConfusionMatrix";
+        trainingConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+        ConfusionMatrixEvaluator validationConfusionMatrix = new ConfusionMatrixEvaluator();
+        validationConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "ValidationConfusionMatrix";
+        validationConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+        ConfusionMatrixEvaluator testConfusionMatrix = new ConfusionMatrixEvaluator();
+        testConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TestConfusionMatrix";
+        testConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+        seq.AddSubOperator(trainingAccuracy);
+        seq.AddSubOperator(validationAccuracy);
+        seq.AddSubOperator(testAccuracy);
+        seq.AddSubOperator(trainingConfusionMatrix);
+        seq.AddSubOperator(validationConfusionMatrix);
+        seq.AddSubOperator(testConfusionMatrix);
+        return seq;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1287)
@@ -54,4 +54,6 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
@@ -69,6 +71,21 @@
     </Compile>
     <Compile Include="HeuristicLabGPTimeSeriesPlugin.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="OffspringSelectionGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OffspringSelectionGpEditor.Designer.cs">
+      <DependentUpon>OffspringSelectionGpEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProblemInjector.cs" />
     <Compile Include="ProfitEvaluator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StandardGP.cs" />
+    <Compile Include="StandardGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StandardGpEditor.Designer.cs">
+      <DependentUpon>StandardGpEditor.cs</DependentUpon>
+    </Compile>
     <Compile Include="TheilInequalityCoefficientEvaluator.cs" />
   </ItemGroup>
@@ -98,4 +115,12 @@
       <Name>HeuristicLab.GP</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
+      <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
+      <Name>HeuristicLab.Logging</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
@@ -106,4 +131,12 @@
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="OffspringSelectionGpEditor.resx">
+      <DependentUpon>OffspringSelectionGpEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StandardGpEditor.resx">
+      <DependentUpon>StandardGpEditor.cs</DependentUpon>
+    </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1287)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Logging;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    public virtual bool Autoregressive {
+      get { return ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data; }
+      set { ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = value; }
+    }
+
+    protected override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(StandardGP.BestSolutionProcessor);
+      return seq;
+    }
+
+    public override IEditor CreateEditor() {
+      return new OffspringSelectionGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new OffspringSelectionGpEditor(this);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGPEditor.resx
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGPEditor.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGPEditor.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.Designer.cs	(revision 1287)
@@ -0,0 +1,98 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  partial class OffspringSelectionGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.autoregressionCheckbox = new System.Windows.Forms.CheckBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.label1);
+      this.parametersTabPage.Controls.Add(this.autoregressionCheckbox);
+      this.parametersTabPage.Controls.SetChildIndex(this.autoregressionCheckbox, 0);
+      this.parametersTabPage.Controls.SetChildIndex(this.label1, 0);
+      // 
+      // autoregressionCheckbox
+      // 
+      this.autoregressionCheckbox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.autoregressionCheckbox.AutoSize = true;
+      this.autoregressionCheckbox.Location = new System.Drawing.Point(218, 267);
+      this.autoregressionCheckbox.Name = "autoregressionCheckbox";
+      this.autoregressionCheckbox.Size = new System.Drawing.Size(135, 17);
+      this.autoregressionCheckbox.TabIndex = 18;
+      this.autoregressionCheckbox.Text = "Autoregression allowed";
+      this.autoregressionCheckbox.UseVisualStyleBackColor = true;
+      // 
+      // label1
+      // 
+      this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(65, 268);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(127, 13);
+      this.label1.TabIndex = 19;
+      this.label1.Text = "Autoregressive modelling:";
+      // 
+      // OffspringSelectionGpEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "OffspringSelectionGpEditor";
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox autoregressionCheckbox;
+    private System.Windows.Forms.Label label1;
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGpEditor.cs	(revision 1287)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public partial class OffspringSelectionGpEditor : HeuristicLab.GP.StructureIdentification.OffspringSelectionGpEditor {
+    public OffspringSelectionGpEditor() {
+      InitializeComponent();
+    }
+    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
+      : this() {
+      OffspringSelectionGP = osgp;
+    }
+
+    protected override void SetDataBinding() {
+      base.SetDataBinding();      
+      autoregressionCheckbox.DataBindings.Add("Checked", OffspringSelectionGP, "Autoregressive");
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProblemInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProblemInjector.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/ProblemInjector.cs	(revision 1287)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class ProblemInjector : HeuristicLab.GP.StructureIdentification.ProblemInjector {
+
+    public override string Description {
+      get {
+        return "Problem injector for time series structure identification.";
+      }
+    }
+
+    public ProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("Autoregressive", "Autoregressive modelling includes previous values of the target variable to predict future values.", typeof(BoolData), Core.VariableKind.New));
+      GetVariableInfo("Autoregressive").Local = true;
+      AddVariable(new Core.Variable("Autoregressive", new BoolData()));
+
+      AddVariableInfo(new Core.VariableInfo("MaxTimeOffset", "MaxTimeOffset", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("MaxTimeOffset").Local = true;
+      AddVariable(new Core.Variable("MaxTimeOffset", new IntData(0)));
+
+      AddVariableInfo(new Core.VariableInfo("MinTimeOffset", "MinTimeOffset", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("MinTimeOffset").Local = true;
+      AddVariable(new Core.Variable("MinTimeOffset", new IntData(-1)));
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1287)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Logging;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
+    public bool Autoregressive {
+      get { return ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data; }
+      set { ProblemInjector.GetVariable("Autoregressive").GetValue<BoolData>().Data = value; }
+    }
+
+    protected override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      seq.AddSubOperator(BestSolutionProcessor);
+      return seq;
+    }
+
+    public override IEditor CreateEditor() {
+      return new StandardGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new StandardGpEditor(this);
+    }
+
+    internal static IOperator BestSolutionProcessor {
+      get {
+        SequentialProcessor seq = new SequentialProcessor();
+        TheilInequalityCoefficientEvaluator trainingTheil = new TheilInequalityCoefficientEvaluator();
+        trainingTheil.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingTheil.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TrainingTheilInequalityCoefficient";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TrainingTheilInequalityCoefficientBias";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TrainingTheilInequalityCoefficientVariance";
+        trainingTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TrainingTheilInequalityCoefficientCovariance";
+
+        TheilInequalityCoefficientEvaluator validationTheil = new TheilInequalityCoefficientEvaluator();
+        validationTheil.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationTheil.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "ValidationTheilInequalityCoefficient";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "ValidationTheilInequalityCoefficientBias";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "ValidationTheilInequalityCoefficientVariance";
+        validationTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "ValidationTheilInequalityCoefficientCovariance";
+
+        TheilInequalityCoefficientEvaluator testTheil = new TheilInequalityCoefficientEvaluator();
+        testTheil.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testTheil.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+        testTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TestTheilInequalityCoefficient";
+        testTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TestTheilInequalityCoefficientBias";
+        testTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TestTheilInequalityCoefficientVariance";
+        testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
+
+        SimpleEvaluator trainingEvaluator = new SimpleEvaluator();
+        trainingEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+        trainingEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+        trainingEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+
+        SimpleEvaluator validationEvaluator = new SimpleEvaluator();
+        validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+        validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+        validationEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+
+        SimpleEvaluator testEvaluator = new SimpleEvaluator();
+        testEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+        testEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+        testEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+
+        LinechartInjector trainingChartInjector = new LinechartInjector();
+        trainingChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+        trainingChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+        trainingChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTrainingPredictedValues";
+
+        LinechartInjector validationChartInjector = new LinechartInjector();
+        validationChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+        validationChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+        validationChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartValidationPredictedValues";
+
+        LinechartInjector testChartInjector = new LinechartInjector();
+        testChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+        testChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+        testChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTestPredictedValues";
+
+        seq.AddSubOperator(trainingTheil);
+        seq.AddSubOperator(validationTheil);
+        seq.AddSubOperator(testTheil);
+        seq.AddSubOperator(trainingEvaluator);
+        seq.AddSubOperator(trainingChartInjector);
+        seq.AddSubOperator(validationEvaluator);
+        seq.AddSubOperator(validationChartInjector);
+        seq.AddSubOperator(testEvaluator);
+        seq.AddSubOperator(testChartInjector);
+
+        return seq;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.Designer.cs	(revision 1287)
@@ -0,0 +1,98 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  partial class StandardGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.label1 = new System.Windows.Forms.Label();
+      this.autoregressionCheckbox = new System.Windows.Forms.CheckBox();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.label1);
+      this.parametersTabPage.Controls.Add(this.autoregressionCheckbox);
+      this.parametersTabPage.Controls.SetChildIndex(this.autoregressionCheckbox, 0);
+      this.parametersTabPage.Controls.SetChildIndex(this.label1, 0);
+      // 
+      // label1
+      // 
+      this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(65, 235);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(127, 13);
+      this.label1.TabIndex = 21;
+      this.label1.Text = "Autoregressive modelling:";
+      // 
+      // autoregressionCheckbox
+      // 
+      this.autoregressionCheckbox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.autoregressionCheckbox.AutoSize = true;
+      this.autoregressionCheckbox.Location = new System.Drawing.Point(218, 234);
+      this.autoregressionCheckbox.Name = "autoregressionCheckbox";
+      this.autoregressionCheckbox.Size = new System.Drawing.Size(135, 17);
+      this.autoregressionCheckbox.TabIndex = 20;
+      this.autoregressionCheckbox.Text = "Autoregression allowed";
+      this.autoregressionCheckbox.UseVisualStyleBackColor = true;
+      // 
+      // StandardGpEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "StandardGpEditor";
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.CheckBox autoregressionCheckbox;
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.cs	(revision 1287)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public partial class StandardGpEditor : HeuristicLab.GP.StructureIdentification.StandardGpEditor {
+    public StandardGpEditor() {
+      InitializeComponent();
+    }
+
+    public StandardGpEditor(StandardGP standardGp)
+      : this() {
+      StandardGP = standardGp;
+    }
+
+    protected override void SetDataBinding() {
+      base.SetDataBinding();
+      autoregressionCheckbox.DataBindings.Add("Checked", StandardGP, "Autoregressive");
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.resx
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGpEditor.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1287)
@@ -0,0 +1,425 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Selection;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public abstract class AlgorithmBase : ItemBase {
+    public virtual double MutationRate {
+      get { return GetVariableInjector().GetVariable("MutationRate").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("MutationRate").GetValue<DoubleData>().Data = value; }
+    }
+    public virtual int PopulationSize {
+      get { return GetVariableInjector().GetVariable("PopulationSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("PopulationSize").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual bool SetSeedRandomly {
+      get { return GetRandomInjector().GetVariable("SetSeedRandomly").GetValue<BoolData>().Data; }
+      set { GetRandomInjector().GetVariable("SetSeedRandomly").GetValue<BoolData>().Data = value; }
+    }
+
+    public virtual int Seed {
+      get { return GetRandomInjector().GetVariable("Seed").GetValue<IntData>().Data; }
+      set { GetRandomInjector().GetVariable("Seed").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual IOperator ProblemInjector {
+      get { return algorithm.SubOperators[0]; }
+      set {
+        value.Name = "ProblemInjector";
+        algorithm.RemoveSubOperator(0);
+        algorithm.AddSubOperator(value, 0);
+      }
+    }
+
+    public virtual int Elites {
+      get { return GetVariableInjector().GetVariable("Elites").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("Elites").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int MaxTreeSize {
+      get { return GetVariableInjector().GetVariable("MaxTreeSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxTreeSize").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int MaxTreeHeight {
+      get { return GetVariableInjector().GetVariable("MaxTreeHeight").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxTreeHeight").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int Parents {
+      get { return GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual double PunishmentFactor {
+      get { return GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public virtual bool UseEstimatedTargetValue {
+      get { return GetVariableInjector().GetVariable("UseEstimatedTargetValue").GetValue<BoolData>().Data; }
+      set { GetVariableInjector().GetVariable("UseEstimatedTargetValue").GetValue<BoolData>().Data = value; }
+    }
+
+    private IOperator algorithm;
+
+    private SequentialEngine.SequentialEngine engine;
+    public IEngine Engine {
+      get { return engine; }
+      protected set { engine = (SequentialEngine.SequentialEngine)value; }
+    }
+
+    public AlgorithmBase() {
+      engine = new SequentialEngine.SequentialEngine();
+      CombinedOperator algo = CreateAlgorithm();
+      engine.OperatorGraph.AddOperator(algo);
+      engine.OperatorGraph.InitialOperator = algo;
+      SetSeedRandomly = true;
+      Elites = 1;
+      MutationRate = 0.15;
+      PopulationSize = 1000;
+      MaxTreeSize = 100;
+      MaxTreeHeight = 10;
+      Parents = 2000;
+      PunishmentFactor = 10;
+      UseEstimatedTargetValue = false;
+    }
+
+    protected internal virtual CombinedOperator CreateAlgorithm() {
+      CombinedOperator algo = new CombinedOperator();
+      algo.Name = "GP";
+      SequentialProcessor seq = new SequentialProcessor();
+      IOperator problemInjector = CreateProblemInjector();
+
+      RandomInjector randomInjector = new RandomInjector();
+      randomInjector.Name = "Random Injector";
+
+      IOperator globalInjector = CreateGlobalInjector();
+      IOperator initialization = CreateInitialization();
+      IOperator funLibInjector = CreateFunctionLibraryInjector();
+      IOperator mainLoop = CreateMainLoop();
+      mainLoop.Name = "Main loop";
+
+      IOperator treeCreator = CreateTreeCreator();
+
+      MeanSquaredErrorEvaluator evaluator = new MeanSquaredErrorEvaluator();
+      evaluator.GetVariableInfo("MSE").ActualName = "Quality";
+      evaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      evaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      evaluator.Name = "Evaluator";
+
+      IOperator crossover = CreateCrossover();
+      IOperator manipulator = CreateManipulator();
+
+      IOperator selector = CreateSelector();
+      LeftReducer cleanUp = new LeftReducer();
+
+      seq.AddSubOperator(problemInjector);
+      seq.AddSubOperator(randomInjector);
+      seq.AddSubOperator(globalInjector);
+      seq.AddSubOperator(funLibInjector);
+      seq.AddSubOperator(initialization);
+      seq.AddSubOperator(mainLoop);
+      seq.AddSubOperator(cleanUp);
+
+      initialization.AddSubOperator(treeCreator);
+      initialization.AddSubOperator(evaluator);
+
+      mainLoop.AddSubOperator(selector);
+      mainLoop.AddSubOperator(crossover);
+      mainLoop.AddSubOperator(manipulator);
+      mainLoop.AddSubOperator(evaluator);
+      algo.OperatorGraph.AddOperator(seq);
+      algo.OperatorGraph.InitialOperator = seq;
+      this.algorithm = seq;
+      return algo;
+    }
+
+    protected internal virtual IOperator CreateProblemInjector() {
+      return new EmptyOperator();
+    }
+
+    protected internal abstract IOperator CreateSelector();
+
+    protected internal abstract IOperator CreateCrossover();
+
+    protected internal abstract IOperator CreateTreeCreator();
+
+    protected internal abstract IOperator CreateFunctionLibraryInjector();
+
+    protected internal virtual IOperator CreateGlobalInjector() {
+      VariableInjector injector = new VariableInjector();
+      injector.Name = "Global Injector";
+      injector.AddVariable(new HeuristicLab.Core.Variable("Generations", new IntData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MutationRate", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("PopulationSize", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Elites", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Maximization", new BoolData(false)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeHeight", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeSize", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("EvaluatedSolutions", new IntData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Parents", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData()));
+      return injector;
+    }
+
+    protected internal abstract IOperator CreateManipulator();
+
+    protected internal virtual IOperator CreateInitialization() {
+      CombinedOperator init = new CombinedOperator();
+      init.Name = "Initialization";
+      SequentialProcessor seq = new SequentialProcessor();
+      SubScopesCreater subScopesCreater = new SubScopesCreater();
+      subScopesCreater.GetVariableInfo("SubScopes").ActualName = "PopulationSize";
+      UniformSequentialSubScopesProcessor subScopesProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor individualSeq = new SequentialProcessor();
+      OperatorExtractor treeCreater = new OperatorExtractor();
+      treeCreater.Name = "Tree generator (extr.)";
+      treeCreater.GetVariableInfo("Operator").ActualName = "Tree generator";
+      OperatorExtractor evaluator = new OperatorExtractor();
+      evaluator.Name = "Evaluator (extr.)";
+      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
+      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
+      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
+      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      Counter evalCounter = new Counter();
+      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+      seq.AddSubOperator(subScopesCreater);
+      seq.AddSubOperator(subScopesProc);
+      seq.AddSubOperator(sorter);
+
+      subScopesProc.AddSubOperator(individualSeq);
+      individualSeq.AddSubOperator(treeCreater);
+      individualSeq.AddSubOperator(evaluator);
+      individualSeq.AddSubOperator(validationEvaluator);
+      individualSeq.AddSubOperator(evalCounter);
+
+      init.OperatorGraph.AddOperator(seq);
+      init.OperatorGraph.InitialOperator = seq;
+      return init;
+    }
+
+    protected internal virtual IOperator CreateMainLoop() {
+      CombinedOperator main = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      IOperator childCreater = CreateChildCreater();
+      IOperator replacement = CreateReplacement();
+
+      BestSolutionStorer solutionStorer = new BestSolutionStorer();
+      solutionStorer.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      solutionStorer.GetVariableInfo("BestSolution").ActualName = "BestValidationSolution";
+      solutionStorer.AddSubOperator(CreateBestSolutionProcessor());
+
+      BestAverageWorstQualityCalculator qualityCalculator = new BestAverageWorstQualityCalculator();
+      BestAverageWorstQualityCalculator validationQualityCalculator = new BestAverageWorstQualityCalculator();
+      validationQualityCalculator.Name = "BestAverageWorstValidationQualityCalculator";
+      validationQualityCalculator.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      validationQualityCalculator.GetVariableInfo("BestQuality").ActualName = "BestValidationQuality";
+      validationQualityCalculator.GetVariableInfo("AverageQuality").ActualName = "AverageValidationQuality";
+      validationQualityCalculator.GetVariableInfo("WorstQuality").ActualName = "WorstValidationQuality";
+      IOperator loggingOperator = CreateLoggingOperator();
+      Counter counter = new Counter();
+      counter.GetVariableInfo("Value").ActualName = "Generations";
+      IOperator loopCondition = CreateLoopCondition(seq);
+
+      seq.AddSubOperator(childCreater);
+      seq.AddSubOperator(replacement);
+      seq.AddSubOperator(solutionStorer);
+      seq.AddSubOperator(qualityCalculator);
+      seq.AddSubOperator(validationQualityCalculator);
+      seq.AddSubOperator(loggingOperator);
+      seq.AddSubOperator(counter);
+      seq.AddSubOperator(loopCondition);
+
+      main.OperatorGraph.AddOperator(seq);
+      main.OperatorGraph.InitialOperator = seq;
+      return main;
+    }
+
+    protected internal virtual IOperator CreateLoggingOperator() {
+      return new EmptyOperator();
+    }
+
+    protected internal virtual IOperator CreateLoopCondition(IOperator loop) {
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Loop Condition";
+      LessThanComparator comparator = new LessThanComparator();
+      comparator.GetVariableInfo("LeftSide").ActualName = "Generations";
+      comparator.GetVariableInfo("RightSide").ActualName = "MaxGenerations";
+      comparator.GetVariableInfo("Result").ActualName = "GenerationsCondition";
+      ConditionalBranch cond = new ConditionalBranch();
+      cond.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
+
+      seq.AddSubOperator(comparator);
+      seq.AddSubOperator(cond);
+
+      cond.AddSubOperator(loop);
+      return seq;
+    }
+
+    protected internal virtual IOperator CreateBestSolutionProcessor() {
+      return new EmptyOperator();
+    }
+
+    protected internal virtual IOperator CreateReplacement() {
+      CombinedOperator replacement = new CombinedOperator();
+      replacement.Name = "Replacement";
+      SequentialProcessor seq = new SequentialProcessor();
+      SequentialSubScopesProcessor seqScopeProc = new SequentialSubScopesProcessor();
+      SequentialProcessor selectedProc = new SequentialProcessor();
+      LeftSelector leftSelector = new LeftSelector();
+      leftSelector.GetVariableInfo("Selected").ActualName = "Elites";
+      RightReducer rightReducer = new RightReducer();
+
+      SequentialProcessor remainingProc = new SequentialProcessor();
+      RightSelector rightSelector = new RightSelector();
+      rightSelector.GetVariableInfo("Selected").ActualName = "Elites";
+      LeftReducer leftReducer = new LeftReducer();
+      MergingReducer mergingReducer = new MergingReducer();
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+      seq.AddSubOperator(seqScopeProc);
+      seqScopeProc.AddSubOperator(selectedProc);
+      selectedProc.AddSubOperator(leftSelector);
+      selectedProc.AddSubOperator(rightReducer);
+
+      seqScopeProc.AddSubOperator(remainingProc);
+      remainingProc.AddSubOperator(rightSelector);
+      remainingProc.AddSubOperator(leftReducer);
+      seq.AddSubOperator(mergingReducer);
+      seq.AddSubOperator(sorter);
+      replacement.OperatorGraph.AddOperator(seq);
+      replacement.OperatorGraph.InitialOperator = seq;
+      return replacement;
+    }
+
+    protected internal virtual IOperator CreateChildCreater() {
+      CombinedOperator childCreater = new CombinedOperator();
+      childCreater.Name = "Create children";
+      SequentialProcessor seq = new SequentialProcessor();
+      OperatorExtractor selector = new OperatorExtractor();
+      selector.Name = "Selector (extr.)";
+      selector.GetVariableInfo("Operator").ActualName = "Selector";
+      SequentialSubScopesProcessor seqScopesProc = new SequentialSubScopesProcessor();
+      EmptyOperator emptyOpt = new EmptyOperator();
+      SequentialProcessor selectedProc = new SequentialProcessor();
+      OperatorExtractor crossover = new OperatorExtractor();
+      crossover.Name = "Crossover (extr.)";
+      crossover.GetVariableInfo("Operator").ActualName = "Crossover";
+      UniformSequentialSubScopesProcessor individualProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor individualSeqProc = new SequentialProcessor();
+      StochasticBranch cond = new StochasticBranch();
+      cond.GetVariableInfo("Probability").ActualName = "MutationRate";
+      OperatorExtractor manipulator = new OperatorExtractor();
+      manipulator.Name = "Manipulator (extr.)";
+      manipulator.GetVariableInfo("Operator").ActualName = "Manipulator";
+      OperatorExtractor evaluator = new OperatorExtractor();
+      evaluator.Name = "Evaluator (extr.)";
+      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
+      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
+      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
+      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      Counter evalCounter = new Counter();
+      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+
+      seq.AddSubOperator(selector);
+      seq.AddSubOperator(seqScopesProc);
+      seqScopesProc.AddSubOperator(emptyOpt);
+      seqScopesProc.AddSubOperator(selectedProc);
+      selectedProc.AddSubOperator(crossover);
+      selectedProc.AddSubOperator(individualProc);
+      individualProc.AddSubOperator(individualSeqProc);
+      individualSeqProc.AddSubOperator(cond);
+      cond.AddSubOperator(manipulator);
+      individualSeqProc.AddSubOperator(evaluator);
+      individualSeqProc.AddSubOperator(validationEvaluator);
+      individualSeqProc.AddSubOperator(evalCounter);
+      selectedProc.AddSubOperator(sorter);
+
+      childCreater.OperatorGraph.AddOperator(seq);
+      childCreater.OperatorGraph.InitialOperator = seq;
+      return childCreater;
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      AlgorithmBase clone = (AlgorithmBase)base.Clone(clonedObjects);
+      clonedObjects.Add(Guid, clone);
+      clone.engine = (SequentialEngine.SequentialEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
+    protected VariableInjector GetVariableInjector() {
+      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      // SequentialProcessor in GP
+      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
+      return (VariableInjector)algorithm.SubOperators[2];
+    }
+
+    protected RandomInjector GetRandomInjector() {
+      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      // SequentialProcessor in GP
+      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
+      return (RandomInjector)algorithm.SubOperators[1];
+    }
+
+    #region Persistence Methods
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Engine", Engine, document, persistedObjects));
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      engine = (SequentialEngine.SequentialEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/Evaluators/MeanAbsolutePercentageOfRangeErrorEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/Evaluators/MeanAbsolutePercentageOfRangeErrorEvaluator.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/Evaluators/MeanAbsolutePercentageOfRangeErrorEvaluator.cs	(revision 1287)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class MeanAbsolutePercentageOfRangeErrorEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates
+the mean of the absolute percentage error (scale invariant) relative to the range of the target varibale of estimated values vs. real values of 'TargetVariable'.";
+      }
+    }
+
+    public MeanAbsolutePercentageOfRangeErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("MAPRE", "The mean absolute percentage range error of the model", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      double errorsSum = 0.0;
+      int n = 0;
+      double range = dataset.GetRange(targetVariable, start, end);
+      for (int sample = start; sample < end; sample++) {
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+
+        if (!double.IsNaN(original) && !double.IsInfinity(original) && original != 0.0) {
+          double percent_error = Math.Abs((estimated - original) / range);
+          errorsSum += percent_error;
+          n++;
+        }
+      }
+      double quality = errorsSum / n;
+      if (double.IsNaN(quality) || double.IsInfinity(quality))
+        quality = double.MaxValue;
+
+      // create a variable for the MAPRE
+      DoubleData mapre = GetVariableValue<DoubleData>("MAPRE", scope, false, false);
+      if (mapre == null) {
+        mapre = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MAPRE"), mapre));
+      }
+
+      mapre.Data = quality;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/FunctionLibraryInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/FunctionLibraryInjector.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/FunctionLibraryInjector.cs	(revision 1287)
@@ -0,0 +1,205 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Constraints;
+using StructId = HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class FunctionLibraryInjector : OperatorBase {
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string ALLOWEDFEATURES = "AllowedFeatures";
+    private const string FUNCTIONLIBRARY = "FunctionLibrary";
+
+    public override string Description {
+      get { return @"Injects a default function library for regression and classification problems."; }
+    }
+
+    public FunctionLibraryInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(ALLOWEDFEATURES, "List of indexes of allowed features", typeof(ItemList<IntData>), VariableKind.In));
+      AddVariableInfo(new VariableInfo(FUNCTIONLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      StructId.Variable variable;
+      GPOperatorLibrary operatorLibrary;
+
+      ItemList<IntData> allowedFeatures = GetVariableValue<ItemList<IntData>>(ALLOWEDFEATURES, scope, true);
+      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
+
+      // remove the target-variable in case it occures in allowed features
+      List<IntData> ts = allowedFeatures.FindAll(d => d.Data == targetVariable);
+      foreach (IntData t in ts) allowedFeatures.Remove(t);
+
+      variable = new StructId.Variable();
+      StructId.Constant constant = new StructId.Constant();
+
+      StructId.Addition addition = new StructId.Addition();
+      StructId.And and = new StructId.And();
+      StructId.Average average = new StructId.Average();
+      StructId.Cosinus cosinus = new StructId.Cosinus();
+      StructId.Division division = new StructId.Division();
+      StructId.Equal equal = new StructId.Equal();
+      StructId.Exponential exponential = new StructId.Exponential();
+      StructId.GreaterThan greaterThan = new StructId.GreaterThan();
+      StructId.IfThenElse ifThenElse = new StructId.IfThenElse();
+      StructId.LessThan lessThan = new StructId.LessThan();
+      StructId.Logarithm logarithm = new StructId.Logarithm();
+      StructId.Multiplication multiplication = new StructId.Multiplication();
+      StructId.Not not = new StructId.Not();
+      StructId.Or or = new StructId.Or();
+      StructId.Power power = new StructId.Power();
+      StructId.Signum signum = new StructId.Signum();
+      StructId.Sinus sinus = new StructId.Sinus();
+      StructId.Sqrt sqrt = new StructId.Sqrt();
+      StructId.Subtraction subtraction = new StructId.Subtraction();
+      StructId.Tangens tangens = new StructId.Tangens();
+      StructId.Xor xor = new StructId.Xor();
+
+      IFunction[] booleanFunctions = new IFunction[] {
+        and,
+        equal,
+        greaterThan,
+        lessThan,
+        not,
+        or,
+        xor 
+      };
+      IFunction[] doubleFunctions = new IFunction[] {
+        variable,
+        constant,
+        addition,
+        average,
+        cosinus,
+        division,
+        exponential,
+        ifThenElse,
+        logarithm,
+        multiplication,
+        power,
+        signum,
+        sinus,
+        sqrt,
+        subtraction,
+        tangens
+      };
+
+      SetAllowedSubOperators(and, booleanFunctions);
+      SetAllowedSubOperators(equal, doubleFunctions);
+      SetAllowedSubOperators(greaterThan, doubleFunctions);
+      SetAllowedSubOperators(lessThan, doubleFunctions);
+      SetAllowedSubOperators(not, booleanFunctions);
+      SetAllowedSubOperators(or, booleanFunctions);
+      SetAllowedSubOperators(xor, booleanFunctions);
+      SetAllowedSubOperators(addition, doubleFunctions);
+      SetAllowedSubOperators(average, doubleFunctions);
+      SetAllowedSubOperators(cosinus, doubleFunctions);
+      SetAllowedSubOperators(division, doubleFunctions);
+      SetAllowedSubOperators(exponential, doubleFunctions);
+      SetAllowedSubOperators(ifThenElse, 0, booleanFunctions);
+      SetAllowedSubOperators(ifThenElse, 1, doubleFunctions);
+      SetAllowedSubOperators(ifThenElse, 2, doubleFunctions);
+      SetAllowedSubOperators(logarithm, doubleFunctions);
+      SetAllowedSubOperators(multiplication, doubleFunctions);
+      SetAllowedSubOperators(power, doubleFunctions);
+      SetAllowedSubOperators(signum, doubleFunctions);
+      SetAllowedSubOperators(sinus, doubleFunctions);
+      SetAllowedSubOperators(sqrt, doubleFunctions);
+      SetAllowedSubOperators(subtraction, doubleFunctions);
+      SetAllowedSubOperators(tangens, doubleFunctions);
+
+      operatorLibrary = new GPOperatorLibrary();
+      operatorLibrary.GPOperatorGroup.AddOperator(variable);
+      operatorLibrary.GPOperatorGroup.AddOperator(constant);
+      operatorLibrary.GPOperatorGroup.AddOperator(addition);
+      operatorLibrary.GPOperatorGroup.AddOperator(average);
+      operatorLibrary.GPOperatorGroup.AddOperator(and);
+      operatorLibrary.GPOperatorGroup.AddOperator(cosinus);
+      operatorLibrary.GPOperatorGroup.AddOperator(division);
+      operatorLibrary.GPOperatorGroup.AddOperator(equal);
+      operatorLibrary.GPOperatorGroup.AddOperator(exponential);
+      operatorLibrary.GPOperatorGroup.AddOperator(greaterThan);
+      operatorLibrary.GPOperatorGroup.AddOperator(ifThenElse);
+      operatorLibrary.GPOperatorGroup.AddOperator(lessThan);
+      operatorLibrary.GPOperatorGroup.AddOperator(logarithm);
+      operatorLibrary.GPOperatorGroup.AddOperator(multiplication);
+      operatorLibrary.GPOperatorGroup.AddOperator(not);
+      operatorLibrary.GPOperatorGroup.AddOperator(power);
+      operatorLibrary.GPOperatorGroup.AddOperator(or);
+      operatorLibrary.GPOperatorGroup.AddOperator(signum);
+      operatorLibrary.GPOperatorGroup.AddOperator(sinus);
+      operatorLibrary.GPOperatorGroup.AddOperator(sqrt);
+      operatorLibrary.GPOperatorGroup.AddOperator(subtraction);
+      operatorLibrary.GPOperatorGroup.AddOperator(tangens);
+      operatorLibrary.GPOperatorGroup.AddOperator(xor);
+
+      int[] allowedIndexes = new int[allowedFeatures.Count];
+      for (int i = 0; i < allowedIndexes.Length; i++) {
+        allowedIndexes[i] = allowedFeatures[i].Data;
+      }
+
+      variable.SetConstraints(allowedIndexes, 0, 0);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(FUNCTIONLIBRARY), operatorLibrary));
+      return null;
+    }
+
+    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
+      foreach (IConstraint c in f.Constraints) {
+        if (c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          typeConstraint.Clear();
+          foreach (IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        } else if (c is AllSubOperatorsTypeConstraint) {
+          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
+          typeConstraint.Clear();
+          foreach (IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        }
+      }
+    }
+
+    private void SetAllowedSubOperators(IFunction f, int p, IFunction[] gs) {
+      foreach (IConstraint c in f.Constraints) {
+        if (c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          if (typeConstraint.SubOperatorIndex.Data == p) {
+            typeConstraint.Clear();
+            foreach (IFunction g in gs) {
+              typeConstraint.AddOperator(g);
+            }
+          }
+        }
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1287)
@@ -71,4 +71,28 @@
     <Compile Include="BakedTreeEvaluator.cs" />
     <Compile Include="Constant.cs" />
+    <Compile Include="AlgorithmBase.cs" />
+    <Compile Include="Evaluators\MeanAbsolutePercentageOfRangeErrorEvaluator.cs" />
+    <Compile Include="FunctionLibraryInjector.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="OffSpringSelectionGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OffSpringSelectionGpEditor.Designer.cs">
+      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProblemInjector.cs" />
+    <Compile Include="ProblemInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProblemInjectorView.Designer.cs">
+      <DependentUpon>ProblemInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StandardGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StandardGpEditor.Designer.cs">
+      <DependentUpon>StandardGpEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StandardGP.cs" />
     <Compile Include="Cosinus.cs" />
     <Compile Include="Differential.cs" />
@@ -98,11 +122,4 @@
     <Compile Include="Sinus.cs" />
     <Compile Include="Sqrt.cs" />
-    <Compile Include="StructIdProblemInjector.cs" />
-    <Compile Include="StructIdProblemInjectorView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="StructIdProblemInjectorView.Designer.cs">
-      <DependentUpon>StructIdProblemInjectorView.cs</DependentUpon>
-    </Compile>
     <Compile Include="Subtraction.cs" />
     <Compile Include="SymbolicExpressionExporter.cs" />
@@ -129,8 +146,20 @@
       <Name>HeuristicLab.Data</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
       <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
       <Name>HeuristicLab.GP</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
+      <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
+      <Name>HeuristicLab.Logging</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators.Programmable\HeuristicLab.Operators.Programmable.csproj">
+      <Project>{E3CCBFC6-900C-41B6-AFB8-6646DB097435}</Project>
+      <Name>HeuristicLab.Operators.Programmable</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
       <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
@@ -145,8 +174,26 @@
       <Name>HeuristicLab.Random</Name>
     </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="StructIdProblemInjectorView.resx">
-      <DependentUpon>StructIdProblemInjectorView.cs</DependentUpon>
+    <ProjectReference Include="..\HeuristicLab.Selection.OffspringSelection\HeuristicLab.Selection.OffspringSelection.csproj">
+      <Project>{205898D3-2717-4686-AF17-52409B7EC0C6}</Project>
+      <Name>HeuristicLab.Selection.OffspringSelection</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
+      <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
+      <Name>HeuristicLab.Selection</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.SequentialEngine\HeuristicLab.SequentialEngine.csproj">
+      <Project>{B4BE8E53-BA06-4237-9A01-24255F880201}</Project>
+      <Name>HeuristicLab.SequentialEngine</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="OffSpringSelectionGpEditor.resx">
+      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProblemInjectorView.resx">
+      <DependentUpon>ProblemInjectorView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StandardGpEditor.resx">
+      <DependentUpon>StandardGpEditor.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs	(revision 1287)
@@ -0,0 +1,404 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP.StructureIdentification {
+  partial class OffspringSelectionGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.executeButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.selectionPressureTextBox = new System.Windows.Forms.TextBox();
+      this.selectionPressureLabel = new System.Windows.Forms.Label();
+      this.viewProblemInitializationButton = new System.Windows.Forms.Button();
+      this.setProblemInitializationButton = new System.Windows.Forms.Button();
+      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
+      this.elitesTextBox = new System.Windows.Forms.TextBox();
+      this.problemInitializationLabel = new System.Windows.Forms.Label();
+      this.elitesLabel = new System.Windows.Forms.Label();
+      this.mutationRateTextBox = new System.Windows.Forms.TextBox();
+      this.mutationRateLabel = new System.Windows.Forms.Label();
+      this.maximumEvaluatedSolutionsTextBox = new System.Windows.Forms.TextBox();
+      this.maxEvaluatedSolutionsLabel = new System.Windows.Forms.Label();
+      this.randomSeedTextBox = new System.Windows.Forms.TextBox();
+      this.populationSizeTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyLabel = new System.Windows.Forms.Label();
+      this.randomSeedLabel = new System.Windows.Forms.Label();
+      this.populationSizeLabel = new System.Windows.Forms.Label();
+      this.scopesTabPage = new System.Windows.Forms.TabPage();
+      this.scopeView = new HeuristicLab.Core.ScopeView();
+      this.abortButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.cloneEngineButton = new System.Windows.Forms.Button();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.scopesTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // executeButton
+      // 
+      this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.executeButton.Location = new System.Drawing.Point(0, 396);
+      this.executeButton.Name = "executeButton";
+      this.executeButton.Size = new System.Drawing.Size(75, 23);
+      this.executeButton.TabIndex = 1;
+      this.executeButton.Text = "&Execute";
+      this.executeButton.UseVisualStyleBackColor = true;
+      this.executeButton.Click += new System.EventHandler(this.executeButton_Click);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.scopesTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(526, 390);
+      this.tabControl.TabIndex = 0;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.selectionPressureTextBox);
+      this.parametersTabPage.Controls.Add(this.selectionPressureLabel);
+      this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
+      this.parametersTabPage.Controls.Add(this.elitesTextBox);
+      this.parametersTabPage.Controls.Add(this.problemInitializationLabel);
+      this.parametersTabPage.Controls.Add(this.elitesLabel);
+      this.parametersTabPage.Controls.Add(this.mutationRateTextBox);
+      this.parametersTabPage.Controls.Add(this.mutationRateLabel);
+      this.parametersTabPage.Controls.Add(this.maximumEvaluatedSolutionsTextBox);
+      this.parametersTabPage.Controls.Add(this.maxEvaluatedSolutionsLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedTextBox);
+      this.parametersTabPage.Controls.Add(this.populationSizeTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedLabel);
+      this.parametersTabPage.Controls.Add(this.populationSizeLabel);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(518, 364);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // selectionPressureTextBox
+      // 
+      this.selectionPressureTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionPressureTextBox.Location = new System.Drawing.Point(218, 130);
+      this.selectionPressureTextBox.Name = "selectionPressureTextBox";
+      this.selectionPressureTextBox.Size = new System.Drawing.Size(186, 20);
+      this.selectionPressureTextBox.TabIndex = 17;
+      // 
+      // selectionPressureLabel
+      // 
+      this.selectionPressureLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionPressureLabel.AutoSize = true;
+      this.selectionPressureLabel.Location = new System.Drawing.Point(65, 133);
+      this.selectionPressureLabel.Name = "selectionPressureLabel";
+      this.selectionPressureLabel.Size = new System.Drawing.Size(145, 13);
+      this.selectionPressureLabel.TabIndex = 16;
+      this.selectionPressureLabel.Text = "Maximum &Selection Pressure:";
+      // 
+      // viewProblemInitializationButton
+      // 
+      this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 241);
+      this.viewProblemInitializationButton.Name = "viewProblemInitializationButton";
+      this.viewProblemInitializationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewProblemInitializationButton.TabIndex = 14;
+      this.viewProblemInitializationButton.Text = "View...";
+      this.viewProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.viewProblemInitializationButton.Click += new System.EventHandler(this.viewProblemInjectorButton_Click);
+      // 
+      // setProblemInitializationButton
+      // 
+      this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 241);
+      this.setProblemInitializationButton.Name = "setProblemInitializationButton";
+      this.setProblemInitializationButton.Size = new System.Drawing.Size(43, 20);
+      this.setProblemInitializationButton.TabIndex = 15;
+      this.setProblemInitializationButton.Text = "Set...";
+      this.setProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.setProblemInitializationButton.Click += new System.EventHandler(this.setProblemInitializationButton_Click);
+      // 
+      // problemInitializationTextBox
+      // 
+      this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 241);
+      this.problemInitializationTextBox.Name = "problemInitializationTextBox";
+      this.problemInitializationTextBox.ReadOnly = true;
+      this.problemInitializationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.problemInitializationTextBox.TabIndex = 13;
+      // 
+      // setRandomSeedRandomlyCheckBox
+      // 
+      this.setRandomSeedRandomlyCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyCheckBox.AutoSize = true;
+      this.setRandomSeedRandomlyCheckBox.Location = new System.Drawing.Point(218, 6);
+      this.setRandomSeedRandomlyCheckBox.Name = "setRandomSeedRandomlyCheckBox";
+      this.setRandomSeedRandomlyCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.setRandomSeedRandomlyCheckBox.TabIndex = 1;
+      this.setRandomSeedRandomlyCheckBox.UseVisualStyleBackColor = true;
+      this.setRandomSeedRandomlyCheckBox.CheckedChanged += new System.EventHandler(this.setRandomSeedRandomlyCheckBox_CheckedChanged);
+      // 
+      // elitesTextBox
+      // 
+      this.elitesTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesTextBox.Location = new System.Drawing.Point(218, 182);
+      this.elitesTextBox.Name = "elitesTextBox";
+      this.elitesTextBox.Size = new System.Drawing.Size(186, 20);
+      this.elitesTextBox.TabIndex = 11;
+      // 
+      // problemInitializationLabel
+      // 
+      this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationLabel.AutoSize = true;
+      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 244);
+      this.problemInitializationLabel.Name = "problemInitializationLabel";
+      this.problemInitializationLabel.Size = new System.Drawing.Size(105, 13);
+      this.problemInitializationLabel.TabIndex = 12;
+      this.problemInitializationLabel.Text = "&Problem Initialization:";
+      // 
+      // elitesLabel
+      // 
+      this.elitesLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesLabel.AutoSize = true;
+      this.elitesLabel.Location = new System.Drawing.Point(66, 185);
+      this.elitesLabel.Name = "elitesLabel";
+      this.elitesLabel.Size = new System.Drawing.Size(35, 13);
+      this.elitesLabel.TabIndex = 10;
+      this.elitesLabel.Text = "&Elites:";
+      // 
+      // mutationRateTextBox
+      // 
+      this.mutationRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateTextBox.Location = new System.Drawing.Point(218, 156);
+      this.mutationRateTextBox.Name = "mutationRateTextBox";
+      this.mutationRateTextBox.Size = new System.Drawing.Size(186, 20);
+      this.mutationRateTextBox.TabIndex = 9;
+      // 
+      // mutationRateLabel
+      // 
+      this.mutationRateLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateLabel.AutoSize = true;
+      this.mutationRateLabel.Location = new System.Drawing.Point(66, 159);
+      this.mutationRateLabel.Name = "mutationRateLabel";
+      this.mutationRateLabel.Size = new System.Drawing.Size(77, 13);
+      this.mutationRateLabel.TabIndex = 8;
+      this.mutationRateLabel.Text = "&Mutation Rate:";
+      // 
+      // maximumEvaluatedSolutionsTextBox
+      // 
+      this.maximumEvaluatedSolutionsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumEvaluatedSolutionsTextBox.Location = new System.Drawing.Point(218, 104);
+      this.maximumEvaluatedSolutionsTextBox.Name = "maximumEvaluatedSolutionsTextBox";
+      this.maximumEvaluatedSolutionsTextBox.Size = new System.Drawing.Size(186, 20);
+      this.maximumEvaluatedSolutionsTextBox.TabIndex = 7;
+      // 
+      // maxEvaluatedSolutionsLabel
+      // 
+      this.maxEvaluatedSolutionsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maxEvaluatedSolutionsLabel.AutoSize = true;
+      this.maxEvaluatedSolutionsLabel.Location = new System.Drawing.Point(65, 107);
+      this.maxEvaluatedSolutionsLabel.Name = "maxEvaluatedSolutionsLabel";
+      this.maxEvaluatedSolutionsLabel.Size = new System.Drawing.Size(130, 13);
+      this.maxEvaluatedSolutionsLabel.TabIndex = 6;
+      this.maxEvaluatedSolutionsLabel.Text = "Max. E&valuated Solutions:";
+      // 
+      // randomSeedTextBox
+      // 
+      this.randomSeedTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedTextBox.Location = new System.Drawing.Point(218, 26);
+      this.randomSeedTextBox.Name = "randomSeedTextBox";
+      this.randomSeedTextBox.Size = new System.Drawing.Size(186, 20);
+      this.randomSeedTextBox.TabIndex = 3;
+      // 
+      // populationSizeTextBox
+      // 
+      this.populationSizeTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeTextBox.Location = new System.Drawing.Point(218, 78);
+      this.populationSizeTextBox.Name = "populationSizeTextBox";
+      this.populationSizeTextBox.Size = new System.Drawing.Size(186, 20);
+      this.populationSizeTextBox.TabIndex = 5;
+      // 
+      // setRandomSeedRandomlyLabel
+      // 
+      this.setRandomSeedRandomlyLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyLabel.AutoSize = true;
+      this.setRandomSeedRandomlyLabel.Location = new System.Drawing.Point(65, 6);
+      this.setRandomSeedRandomlyLabel.Name = "setRandomSeedRandomlyLabel";
+      this.setRandomSeedRandomlyLabel.Size = new System.Drawing.Size(147, 13);
+      this.setRandomSeedRandomlyLabel.TabIndex = 0;
+      this.setRandomSeedRandomlyLabel.Text = "Set &Random Seed Randomly:";
+      // 
+      // randomSeedLabel
+      // 
+      this.randomSeedLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedLabel.AutoSize = true;
+      this.randomSeedLabel.Location = new System.Drawing.Point(65, 29);
+      this.randomSeedLabel.Name = "randomSeedLabel";
+      this.randomSeedLabel.Size = new System.Drawing.Size(78, 13);
+      this.randomSeedLabel.TabIndex = 2;
+      this.randomSeedLabel.Text = "&Random Seed:";
+      // 
+      // populationSizeLabel
+      // 
+      this.populationSizeLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeLabel.AutoSize = true;
+      this.populationSizeLabel.Location = new System.Drawing.Point(65, 81);
+      this.populationSizeLabel.Name = "populationSizeLabel";
+      this.populationSizeLabel.Size = new System.Drawing.Size(83, 13);
+      this.populationSizeLabel.TabIndex = 4;
+      this.populationSizeLabel.Text = "&Population Size:";
+      // 
+      // scopesTabPage
+      // 
+      this.scopesTabPage.Controls.Add(this.scopeView);
+      this.scopesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.scopesTabPage.Name = "scopesTabPage";
+      this.scopesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.scopesTabPage.Size = new System.Drawing.Size(518, 364);
+      this.scopesTabPage.TabIndex = 2;
+      this.scopesTabPage.Text = "Scopes";
+      this.scopesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // scopeView
+      // 
+      this.scopeView.Caption = "Scope";
+      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeView.Location = new System.Drawing.Point(3, 3);
+      this.scopeView.Name = "scopeView";
+      this.scopeView.Scope = null;
+      this.scopeView.Size = new System.Drawing.Size(512, 358);
+      this.scopeView.TabIndex = 0;
+      // 
+      // abortButton
+      // 
+      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.abortButton.Enabled = false;
+      this.abortButton.Location = new System.Drawing.Point(81, 396);
+      this.abortButton.Name = "abortButton";
+      this.abortButton.Size = new System.Drawing.Size(75, 23);
+      this.abortButton.TabIndex = 2;
+      this.abortButton.Text = "&Abort";
+      this.abortButton.UseVisualStyleBackColor = true;
+      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Location = new System.Drawing.Point(162, 396);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(75, 23);
+      this.resetButton.TabIndex = 3;
+      this.resetButton.Text = "&Reset";
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // cloneEngineButton
+      // 
+      this.cloneEngineButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cloneEngineButton.Location = new System.Drawing.Point(420, 396);
+      this.cloneEngineButton.Name = "cloneEngineButton";
+      this.cloneEngineButton.Size = new System.Drawing.Size(106, 23);
+      this.cloneEngineButton.TabIndex = 4;
+      this.cloneEngineButton.Text = "&Clone Engine...";
+      this.cloneEngineButton.UseVisualStyleBackColor = true;
+      this.cloneEngineButton.Click += new System.EventHandler(this.cloneEngineButton_Click);
+      // 
+      // OffspringSelectionGpEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.cloneEngineButton);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.abortButton);
+      this.Controls.Add(this.executeButton);
+      this.Name = "OffspringSelectionGpEditor";
+      this.Size = new System.Drawing.Size(526, 419);
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.scopesTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button executeButton;
+    protected System.Windows.Forms.TabControl tabControl;
+    protected System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.Button abortButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.TextBox mutationRateTextBox;
+    private System.Windows.Forms.Label mutationRateLabel;
+    private System.Windows.Forms.TextBox populationSizeTextBox;
+    private System.Windows.Forms.Label populationSizeLabel;
+    private System.Windows.Forms.TabPage scopesTabPage;
+    private System.Windows.Forms.TextBox maximumEvaluatedSolutionsTextBox;
+    private System.Windows.Forms.Label maxEvaluatedSolutionsLabel;
+    private System.Windows.Forms.TextBox elitesTextBox;
+    private System.Windows.Forms.Label elitesLabel;
+    private System.Windows.Forms.TextBox randomSeedTextBox;
+    private System.Windows.Forms.Label setRandomSeedRandomlyLabel;
+    private System.Windows.Forms.Label randomSeedLabel;
+    private System.Windows.Forms.CheckBox setRandomSeedRandomlyCheckBox;
+    private System.Windows.Forms.Label problemInitializationLabel;
+    private System.Windows.Forms.Button cloneEngineButton;
+    private System.Windows.Forms.TextBox problemInitializationTextBox;
+    private System.Windows.Forms.Button setProblemInitializationButton;
+    private HeuristicLab.Core.ScopeView scopeView;
+    private System.Windows.Forms.Button viewProblemInitializationButton;
+    private System.Windows.Forms.TextBox selectionPressureTextBox;
+    private System.Windows.Forms.Label selectionPressureLabel;
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs	(revision 1287)
@@ -0,0 +1,142 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public partial class OffspringSelectionGpEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    public OffspringSelectionGP OffspringSelectionGP {
+      get { return (OffspringSelectionGP)Item; }
+      set { base.Item = value; }
+    }
+
+    public OffspringSelectionGpEditor() {
+      InitializeComponent();
+    }
+    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
+      : this() {
+      OffspringSelectionGP = osgp;
+    }
+
+    protected override void RemoveItemEvents() {
+      OffspringSelectionGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      OffspringSelectionGP.Engine.Finished -= new EventHandler(Engine_Finished);
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      OffspringSelectionGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      OffspringSelectionGP.Engine.Finished += new EventHandler(Engine_Finished);
+      SetDataBinding();
+      scopeView.Scope = OffspringSelectionGP.Engine.GlobalScope;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (OffspringSelectionGP == null) {
+        tabControl.Enabled = false;
+      } else {
+        tabControl.Enabled = true;
+        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
+      }
+    }
+
+    protected virtual void SetDataBinding() {
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", OffspringSelectionGP, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Seed");
+      populationSizeTextBox.DataBindings.Add("Text", OffspringSelectionGP, "PopulationSize");
+      maximumEvaluatedSolutionsTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MaxEvaluatedSolutions");
+      selectionPressureTextBox.DataBindings.Add("Text", OffspringSelectionGP, "SelectionPressureLimit");
+      mutationRateTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MutationRate");
+      elitesTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Elites");
+    }
+
+    #region Button Events
+    private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
+      IView view = OffspringSelectionGP.ProblemInjector.CreateView();
+      if(view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+
+    private void setProblemInitializationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        OffspringSelectionGP.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
+      }
+    }
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      resetButton.Enabled = false;
+      OffspringSelectionGP.Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      OffspringSelectionGP.Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      OffspringSelectionGP.Engine.Reset();
+    }
+    private void cloneEngineButton_Click(object sender, EventArgs e) {
+      IEngine clone = (IEngine)OffspringSelectionGP.Engine.Clone();
+      IEditor editor = ((IEditable)clone).CreateEditor();
+      PluginManager.ControlManager.ShowControl(editor);
+    }
+    #endregion
+
+    #region Engine Events
+    private delegate void OnExceptionEventDelegate(object sender, ExceptionEventArgs e);
+    private void Engine_ExceptionOccurred(object sender, ExceptionEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Exception);
+    }
+    private void Engine_Finished(object sender, EventArgs e) {
+      if(InvokeRequired)
+        Invoke((EventHandler)Engine_Finished, sender, e);
+      else {
+        scopeView.Refresh();
+        executeButton.Enabled = true;
+        abortButton.Enabled = false;
+        resetButton.Enabled = true;
+      }
+    }
+    #endregion
+
+    private void setRandomSeedRandomlyCheckBox_CheckedChanged(object sender, EventArgs e) {
+      randomSeedTextBox.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+      randomSeedLabel.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.resx
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1287)
@@ -0,0 +1,271 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Selection;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+using HeuristicLab.Selection.OffspringSelection;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class OffspringSelectionGP : StandardGP {
+
+    public virtual int MaxEvaluatedSolutions {
+      get { return GetVariableInjector().GetVariable("MaxEvaluatedSolutions").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxEvaluatedSolutions").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual double SelectionPressureLimit {
+      get { return GetVariableInjector().GetVariable("SelectionPressureLimit").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("SelectionPressureLimit").GetValue<DoubleData>().Data = value; }
+    }
+
+    public virtual double ComparisonFactor {
+      get { return GetVariableInjector().GetVariable("ComparisonFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("ComparisonFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public virtual double SuccessRatioLimit {
+      get { return GetVariableInjector().GetVariable("SuccessRatioLimit").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("SuccessRatioLimit").GetValue<DoubleData>().Data = value; }
+    }
+
+    public override int MaxGenerations {
+      get { throw new NotSupportedException(); }
+      set { /* ignore */ }
+    }
+
+    public override int TournamentSize {
+      get { throw new NotSupportedException(); }
+      set { /* ignore */ }
+    }
+
+    public OffspringSelectionGP()
+      : base() {
+      PopulationSize = 1000;
+      Parents = 20;
+      MaxEvaluatedSolutions = 1000000;
+      SelectionPressureLimit = 300;
+      ComparisonFactor = 1.0;
+      SuccessRatioLimit = 1.0;
+    }
+
+    protected internal override IOperator CreateGlobalInjector() {
+      VariableInjector injector = (VariableInjector)base.CreateGlobalInjector();
+      injector.RemoveVariable("TournamentSize");
+      injector.RemoveVariable("MaxGenerations");
+      injector.AddVariable(new HeuristicLab.Core.Variable("MaxEvaluatedSolutions", new IntData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("ComparisonFactor", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("SelectionPressureLimit", new DoubleData()));
+      injector.AddVariable(new HeuristicLab.Core.Variable("SuccessRatioLimit", new DoubleData()));
+      return injector;
+    }
+
+    protected internal override IOperator CreateSelector() {
+      CombinedOperator selector = new CombinedOperator();
+      selector.Name = "Selector";
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Selector";
+      EmptyOperator emptyOp = new EmptyOperator();
+      ProportionalSelector femaleSelector = new ProportionalSelector();
+      femaleSelector.GetVariableInfo("Selected").ActualName = "Parents";
+      femaleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
+
+      RandomSelector maleSelector = new RandomSelector();
+      maleSelector.GetVariableInfo("Selected").ActualName = "Parents";
+      maleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
+      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
+      RightChildReducer rightChildReducer = new RightChildReducer();
+      SubScopesMixer mixer = new SubScopesMixer();
+
+      seqSubScopesProc.AddSubOperator(femaleSelector);
+      seqSubScopesProc.AddSubOperator(emptyOp);
+
+      seq.AddSubOperator(maleSelector);
+      seq.AddSubOperator(seqSubScopesProc);
+      seq.AddSubOperator(rightChildReducer);
+      seq.AddSubOperator(mixer);
+
+      selector.OperatorGraph.AddOperator(seq);
+      selector.OperatorGraph.InitialOperator = seq;
+      return selector;
+    }
+
+    protected internal override IOperator CreateChildCreater() {
+      CombinedOperator childCreater = new CombinedOperator();
+      childCreater.Name = "Create children";
+      SequentialProcessor seq = new SequentialProcessor();
+      SequentialProcessor offspringSelectionSeq = new SequentialProcessor();
+      OperatorExtractor selector = new OperatorExtractor();
+      selector.Name = "Selector (extr.)";
+      selector.GetVariableInfo("Operator").ActualName = "Selector";
+      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
+      EmptyOperator emptyOp = new EmptyOperator();
+      OffspringSelector offspringSelector = new OffspringSelector();
+      OffspringAnalyzer offspringAnalyzer = new OffspringAnalyzer();
+      SequentialProcessor selectedProc = new SequentialProcessor();
+      OperatorExtractor crossover = new OperatorExtractor();
+      crossover.Name = "Crossover (extr.)";
+      crossover.GetVariableInfo("Operator").ActualName = "Crossover";
+      UniformSequentialSubScopesProcessor individualProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor individualSeqProc = new SequentialProcessor();
+      StochasticBranch cond = new StochasticBranch();
+      cond.GetVariableInfo("Probability").ActualName = "MutationRate";
+      OperatorExtractor manipulator = new OperatorExtractor();
+      manipulator.Name = "Manipulator (extr.)";
+      manipulator.GetVariableInfo("Operator").ActualName = "Manipulator";
+      OperatorExtractor evaluator = new OperatorExtractor();
+      evaluator.Name = "Evaluator (extr.)";
+      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
+      Counter evalCounter = new Counter();
+      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
+
+      UniformSequentialSubScopesProcessor validationEvaluator = new UniformSequentialSubScopesProcessor();
+      MeanSquaredErrorEvaluator validationQualityEvaluator = new MeanSquaredErrorEvaluator();
+      validationQualityEvaluator.Name = "ValidationMeanSquaredErrorEvaluator";
+      validationQualityEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
+      validationQualityEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationQualityEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+      seqSubScopesProc.AddSubOperator(emptyOp);
+      seqSubScopesProc.AddSubOperator(offspringAnalyzer);
+
+      seq.AddSubOperator(offspringSelectionSeq);
+      offspringSelectionSeq.AddSubOperator(selector);
+      offspringSelectionSeq.AddSubOperator(seqSubScopesProc);
+      offspringSelectionSeq.AddSubOperator(offspringSelector);
+      offspringSelector.AddSubOperator(offspringSelectionSeq);
+
+      offspringAnalyzer.AddSubOperator(selectedProc);
+      selectedProc.AddSubOperator(crossover);
+      selectedProc.AddSubOperator(individualProc);
+      individualProc.AddSubOperator(individualSeqProc);
+      individualSeqProc.AddSubOperator(cond);
+      cond.AddSubOperator(manipulator);
+      individualSeqProc.AddSubOperator(evaluator);
+      individualSeqProc.AddSubOperator(evalCounter);
+
+      SequentialSubScopesProcessor seqSubScopesProc2 = new SequentialSubScopesProcessor();
+      seq.AddSubOperator(seqSubScopesProc2);
+      seqSubScopesProc2.AddSubOperator(emptyOp);
+
+      SequentialProcessor newGenProc = new SequentialProcessor();
+      newGenProc.AddSubOperator(sorter);
+      newGenProc.AddSubOperator(validationEvaluator);
+      seqSubScopesProc2.AddSubOperator(newGenProc);
+
+      validationEvaluator.AddSubOperator(validationQualityEvaluator);
+
+      childCreater.OperatorGraph.AddOperator(seq);
+      childCreater.OperatorGraph.InitialOperator = seq;
+      return childCreater;
+    }
+
+    protected internal override IOperator CreateLoopCondition(IOperator loop) {
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Loop Condition";
+      LessThanComparator generationsComparator = new LessThanComparator();
+      generationsComparator.GetVariableInfo("LeftSide").ActualName = "EvaluatedSolutions";
+      generationsComparator.GetVariableInfo("RightSide").ActualName = "MaxEvaluatedSolutions";
+      generationsComparator.GetVariableInfo("Result").ActualName = "EvaluatedSolutionsCondition";
+
+      LessThanComparator selPresComparator = new LessThanComparator();
+      selPresComparator.GetVariableInfo("LeftSide").ActualName = "SelectionPressure";
+      selPresComparator.GetVariableInfo("RightSide").ActualName = "SelectionPressureLimit";
+      selPresComparator.GetVariableInfo("Result").ActualName = "SelectionPressureCondition";
+
+      ConditionalBranch generationsCond = new ConditionalBranch();
+      generationsCond.GetVariableInfo("Condition").ActualName = "EvaluatedSolutionsCondition";
+
+      ConditionalBranch selPresCond = new ConditionalBranch();
+      selPresCond.GetVariableInfo("Condition").ActualName = "SelectionPressureCondition";
+
+      seq.AddSubOperator(generationsComparator);
+      seq.AddSubOperator(selPresComparator);
+      seq.AddSubOperator(generationsCond);
+      generationsCond.AddSubOperator(selPresCond);
+      selPresCond.AddSubOperator(loop);
+
+      return seq;
+    }
+
+    protected internal override IOperator CreateLoggingOperator() {
+      CombinedOperator loggingOperator = new CombinedOperator();
+      loggingOperator.Name = "Logging";
+      SequentialProcessor seq = new SequentialProcessor();
+
+      DataCollector collector = new DataCollector();
+      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
+      names.Add(new StringData("BestQuality"));
+      names.Add(new StringData("AverageQuality"));
+      names.Add(new StringData("WorstQuality"));
+      names.Add(new StringData("BestValidationQuality"));
+      names.Add(new StringData("AverageValidationQuality"));
+      names.Add(new StringData("WorstValidationQuality"));
+      names.Add(new StringData("EvaluatedSolutions"));
+      names.Add(new StringData("SelectionPressure"));
+      QualityLogger qualityLogger = new QualityLogger();
+      QualityLogger validationQualityLogger = new QualityLogger();
+      validationQualityLogger.Name = "ValidationQualityLogger";
+      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
+
+      seq.AddSubOperator(collector);
+      seq.AddSubOperator(qualityLogger);
+      seq.AddSubOperator(validationQualityLogger);
+
+      loggingOperator.OperatorGraph.AddOperator(seq);
+      loggingOperator.OperatorGraph.InitialOperator = seq;
+      return loggingOperator;
+    }
+
+
+    public override IEditor CreateEditor() {
+      return new OffspringSelectionGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new OffspringSelectionGpEditor(this);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OffspringSelectionGP clone = (OffspringSelectionGP)base.Clone(clonedObjects);
+      clone.SelectionPressureLimit = SelectionPressureLimit;
+      clone.SuccessRatioLimit = SuccessRatioLimit;
+      clone.ComparisonFactor = ComparisonFactor;
+      return clone;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjector.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjector.cs	(revision 1287)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class ProblemInjector : Core.OperatorBase {
+    public override string Description {
+      get { return @"Injects the necessary variables for a structure identification problem."; }
+    }
+
+    public ProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("Dataset", "Dataset", typeof(Dataset), Core.VariableKind.New));
+      GetVariableInfo("Dataset").Local = true;
+      AddVariable(new Core.Variable("Dataset", new Dataset()));
+
+      AddVariableInfo(new Core.VariableInfo("TargetVariable", "TargetVariable", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TargetVariable").Local = true;
+      AddVariable(new Core.Variable("TargetVariable", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("AllowedFeatures", "Indexes of allowed input variables", typeof(ItemList<IntData>), Core.VariableKind.New));
+      GetVariableInfo("AllowedFeatures").Local = true;
+      AddVariable(new Core.Variable("AllowedFeatures", new ItemList<IntData>()));
+
+      AddVariableInfo(new Core.VariableInfo("TrainingSamplesStart", "TrainingSamplesStart", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TrainingSamplesStart").Local = true;
+      AddVariable(new Core.Variable("TrainingSamplesStart", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("TrainingSamplesEnd", "TrainingSamplesEnd", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TrainingSamplesEnd").Local = true;
+      AddVariable(new Core.Variable("TrainingSamplesEnd", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("ValidationSamplesStart", "ValidationSamplesStart", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("ValidationSamplesStart").Local = true;
+      AddVariable(new Core.Variable("ValidationSamplesStart", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("ValidationSamplesEnd", "ValidationSamplesEnd", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("ValidationSamplesEnd").Local = true;
+      AddVariable(new Core.Variable("ValidationSamplesEnd", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("TestSamplesStart", "TestSamplesStart", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TestSamplesStart").Local = true;
+      AddVariable(new Core.Variable("TestSamplesStart", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("TestSamplesEnd", "TestSamplesEnd", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TestSamplesEnd").Local = true;
+      AddVariable(new Core.Variable("TestSamplesEnd", new IntData()));
+    }
+
+    public override Core.IView CreateView() {
+      return new ProblemInjectorView(this);
+    }
+
+    public override Core.IOperation Apply(Core.IScope scope) {
+      foreach(Core.VariableInfo info in VariableInfos) {
+        if(info.Local) {
+          Core.IVariable var = GetVariable(info.FormalName);
+          if(var != null) scope.AddVariable(new Core.Variable(info.ActualName, (Core.IItem)var.Value.Clone()));
+        }
+      }
+      return null;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.Designer.cs	(revision 1287)
@@ -0,0 +1,213 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP.StructureIdentification {
+  partial class ProblemInjectorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.importInstanceButton = new System.Windows.Forms.Button();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
+      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.tabPage1 = new System.Windows.Forms.TabPage();
+      this.variablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
+      this.tabControl.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.variableInfosTabPage.SuspendLayout();
+      this.tabPage1.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // importInstanceButton
+      // 
+      this.importInstanceButton.Location = new System.Drawing.Point(6, 6);
+      this.importInstanceButton.Name = "importInstanceButton";
+      this.importInstanceButton.Size = new System.Drawing.Size(129, 21);
+      this.importInstanceButton.TabIndex = 6;
+      this.importInstanceButton.Text = "&Import...";
+      this.importInstanceButton.UseVisualStyleBackColor = true;
+      this.importInstanceButton.Click += new System.EventHandler(this.importInstanceButton_Click);
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "txt";
+      this.openFileDialog.FileName = "txt";
+      this.openFileDialog.Filter = "Text files|*.txt|All files|*.*";
+      this.openFileDialog.Title = "Import StructId File";
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.dataTabPage);
+      this.tabControl.Controls.Add(this.variableInfosTabPage);
+      this.tabControl.Controls.Add(this.tabPage1);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(507, 451);
+      this.tabControl.TabIndex = 0;
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.datasetView);
+      this.dataTabPage.Controls.Add(this.importInstanceButton);
+      this.dataTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dataTabPage.Name = "dataTabPage";
+      this.dataTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.dataTabPage.Size = new System.Drawing.Size(499, 425);
+      this.dataTabPage.TabIndex = 0;
+      this.dataTabPage.Text = "Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // datasetView
+      // 
+      this.datasetView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.datasetView.Caption = "Editor";
+      this.datasetView.Dataset = null;
+      this.datasetView.Filename = null;
+      this.datasetView.Location = new System.Drawing.Point(6, 33);
+      this.datasetView.Name = "datasetView";
+      this.datasetView.Size = new System.Drawing.Size(487, 386);
+      this.datasetView.TabIndex = 7;
+      // 
+      // variableInfosTabPage
+      // 
+      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfosTabPage.Name = "variableInfosTabPage";
+      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfosTabPage.Size = new System.Drawing.Size(499, 425);
+      this.variableInfosTabPage.TabIndex = 1;
+      this.variableInfosTabPage.Text = "Variable Infos";
+      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(493, 419);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.variablesView);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(499, 425);
+      this.tabPage1.TabIndex = 3;
+      this.tabPage1.Text = "Variables";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // variablesView
+      // 
+      this.variablesView.Caption = "Operator";
+      this.variablesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesView.Location = new System.Drawing.Point(3, 3);
+      this.variablesView.Name = "variablesView";
+      this.variablesView.Operator = null;
+      this.variablesView.Size = new System.Drawing.Size(493, 419);
+      this.variablesView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(499, 425);
+      this.descriptionTabPage.TabIndex = 2;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseDescriptionView
+      // 
+      this.operatorBaseDescriptionView.Caption = "Operator";
+      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
+      this.operatorBaseDescriptionView.Operator = null;
+      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(493, 419);
+      this.operatorBaseDescriptionView.TabIndex = 0;
+      // 
+      // StructIdProblemInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "StructIdProblemInjectorView";
+      this.Size = new System.Drawing.Size(507, 451);
+      this.tabControl.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.variableInfosTabPage.ResumeLayout(false);
+      this.tabPage1.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button importInstanceButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.TabPage variableInfosTabPage;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private HeuristicLab.Core.OperatorBaseDescriptionView operatorBaseDescriptionView;
+    private System.Windows.Forms.TabPage tabPage1;
+    private HeuristicLab.Core.OperatorBaseVariablesView variablesView;
+    private HeuristicLab.DataAnalysis.DatasetView datasetView;
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.cs	(revision 1287)
@@ -0,0 +1,158 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public partial class ProblemInjectorView : ViewBase {
+    public ProblemInjector ProblemInjector {
+      get { return (ProblemInjector)Item; }
+      set { base.Item = value; }
+    }
+
+    public ProblemInjectorView()
+      : base() {
+      InitializeComponent();
+    }
+    public ProblemInjectorView(ProblemInjector problemInjector)
+      : this() {
+      ProblemInjector = problemInjector;
+      variablesView.Operator = problemInjector;
+      variablesView.Update();
+    }
+
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = ProblemInjector;
+      operatorBaseDescriptionView.Operator = ProblemInjector;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ProblemInjector == null) {
+        importInstanceButton.Enabled = false;
+      } else {
+        Dataset dataset = (Dataset)ProblemInjector.GetVariable("Dataset").Value;
+        datasetView.Dataset = dataset;
+        importInstanceButton.Enabled = true;
+      }
+    }
+
+    private void importInstanceButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        DatasetParser parser = new DatasetParser();
+        bool success = false;
+        try {
+          try {
+            parser.Import(openFileDialog.FileName, true);
+            success = true;
+          }
+          catch (DataFormatException ex) {
+            ShowWarningMessageBox(ex);
+            // not possible to parse strictly => clear and try to parse non-strict
+            parser.Reset();
+            parser.Import(openFileDialog.FileName, false);
+            success = true;
+          }
+        }
+        catch (DataFormatException ex) {
+          // if the non-strict parsing also failed then show the exception
+          ShowErrorMessageBox(ex);
+        }
+        if (success) {
+          Dataset dataset = (Dataset)ProblemInjector.GetVariable("Dataset").Value;
+          dataset.Rows = parser.Rows;
+          dataset.Columns = parser.Columns;
+          for (int i = 0; i < parser.VariableNames.Length; i++) {
+            dataset.SetVariableName(i, parser.VariableNames[i]);
+          }
+          dataset.Name = parser.ProblemName;
+          dataset.Samples = new double[dataset.Rows * dataset.Columns];
+          Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
+          TrySetVariable("TrainingSamplesStart", parser.TrainingSamplesStart);
+          TrySetVariable("TrainingSamplesStart", parser.TrainingSamplesStart);
+          TrySetVariable("TrainingSamplesEnd", parser.TrainingSamplesEnd);
+          TrySetVariable("ValidationSamplesStart", parser.ValidationSamplesStart);
+          TrySetVariable("ValidationSamplesEnd", parser.ValidationSamplesEnd);
+          TrySetVariable("TestSamplesStart", parser.TestSamplesStart);
+          TrySetVariable("TestSamplesEnd", parser.TestSamplesEnd);
+          TrySetVariable("TargetVariable", parser.TargetVariable);
+
+          IVariable var = ProblemInjector.GetVariable("AllowedFeatures");
+          if (var != null) {
+            ItemList<IntData> allowedFeatures = (ItemList<IntData>)var.Value;
+            allowedFeatures.Clear();
+            List<int> nonInputVariables = parser.NonInputVariables;
+            for (int i = 0; i < dataset.Columns; i++) {
+              if (!nonInputVariables.Contains(i)) allowedFeatures.Add(new IntData(i));
+            }
+          }
+          Refresh();
+        }
+      }
+    }
+
+    private void TrySetVariable(string name, int value) {
+      IVariable var = ProblemInjector.GetVariable(name);
+      if (var != null) {
+        ((IntData)var.Value).Data = value;
+      }
+    }
+
+    private void ShowWarningMessageBox(Exception ex) {
+      MessageBox.Show(ex.Message,
+                      "Warning - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Warning);
+    }
+    private void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(BuildErrorMessage(ex),
+                      "Error - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+    private string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while (ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.resx
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/ProblemInjectorView.resx	(revision 1287)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1287)
@@ -0,0 +1,297 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Selection;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class StandardGP : AlgorithmBase, IEditable {
+
+    public virtual int MaxGenerations {
+      get { return GetVariableInjector().GetVariable("MaxGenerations").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MaxGenerations").GetValue<IntData>().Data = value; }
+    }
+
+    public virtual int TournamentSize {
+      get { return GetVariableInjector().GetVariable("TournamentSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("TournamentSize").GetValue<IntData>().Data = value; }
+    }
+
+    public double FullTreeShakingFactor {
+      get { return GetVariableInjector().GetVariable("FullTreeShakingFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("FullTreeShakingFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public double OnePointShakingFactor {
+      get { return GetVariableInjector().GetVariable("OnePointShakingFactor").GetValue<DoubleData>().Data; }
+      set { GetVariableInjector().GetVariable("OnePointShakingFactor").GetValue<DoubleData>().Data = value; }
+    }
+
+    public int MinInitialTreeSize {
+      get { return GetVariableInjector().GetVariable("MinInitialTreeSize").GetValue<IntData>().Data; }
+      set { GetVariableInjector().GetVariable("MinInitialTreeSize").GetValue<IntData>().Data = value; }
+    }
+
+    public override int MaxTreeSize {
+      get {
+        return base.MaxTreeSize;
+      }
+      set {
+        base.MaxTreeSize = value;
+        MinInitialTreeSize = value / 2;
+      }
+    }
+
+    public override int PopulationSize {
+      get {
+        return base.PopulationSize;
+      }
+      set {
+        base.PopulationSize = value;
+        Parents = 2 * value;
+      }
+    }
+
+    public StandardGP()
+      : base() {
+      PopulationSize = 10000;
+      MaxGenerations = 100;
+      TournamentSize = 7;
+      MutationRate = 0.15;
+      Elites = 1;
+      MaxTreeSize = 100;
+      MaxTreeHeight = 10;
+      FullTreeShakingFactor = 0.1;
+      OnePointShakingFactor = 1.0;
+      PunishmentFactor = 10.0;
+      UseEstimatedTargetValue = false;
+      SetSeedRandomly = true;
+    }
+
+    protected internal override IOperator CreateProblemInjector() {
+      return new ProblemInjector();
+    }
+
+    protected internal override IOperator CreateSelector() {
+      TournamentSelector selector = new TournamentSelector();
+      selector.Name = "Selector";
+      selector.GetVariableInfo("Selected").ActualName = "Parents";
+      selector.GetVariableInfo("GroupSize").Local = false;
+      selector.RemoveVariable("GroupSize");
+      selector.GetVariableInfo("GroupSize").ActualName = "TournamentSize";
+      return selector;
+    }
+
+    protected internal override IOperator CreateGlobalInjector() {
+      VariableInjector globalInjector = (VariableInjector)base.CreateGlobalInjector();
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("TournamentSize", new IntData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("MaxGenerations", new IntData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("FullTreeShakingFactor", new DoubleData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("OnePointShakingFactor", new DoubleData()));
+      globalInjector.AddVariable(new HeuristicLab.Core.Variable("MinInitialTreeSize", new IntData()));
+      return globalInjector;
+    }
+
+    protected internal override IOperator CreateCrossover() {
+      StandardCrossOver crossover = new StandardCrossOver();
+      crossover.Name = "Crossover";
+      crossover.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      return crossover;
+    }
+
+    protected internal override IOperator CreateTreeCreator() {
+      ProbabilisticTreeCreator treeCreator = new ProbabilisticTreeCreator();
+      treeCreator.Name = "Tree generator";
+      treeCreator.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      treeCreator.GetVariableInfo("MinTreeSize").ActualName = "MinInitialTreeSize";
+      return treeCreator;
+    }
+
+    protected internal override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected internal override IOperator CreateManipulator() {
+      CombinedOperator manipulator = new CombinedOperator();
+      manipulator.Name = "Manipulator";
+      StochasticMultiBranch multibranch = new StochasticMultiBranch();
+      FullTreeShaker fullTreeShaker = new FullTreeShaker();
+      fullTreeShaker.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      fullTreeShaker.GetVariableInfo("ShakingFactor").ActualName = "FullTreeShakingFactor";
+
+      OnePointShaker onepointShaker = new OnePointShaker();
+      onepointShaker.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      onepointShaker.GetVariableInfo("ShakingFactor").ActualName = "OnePointShakingFactor";
+      ChangeNodeTypeManipulation changeNodeTypeManipulation = new ChangeNodeTypeManipulation();
+      changeNodeTypeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      CutOutNodeManipulation cutOutNodeManipulation = new CutOutNodeManipulation();
+      cutOutNodeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      DeleteSubTreeManipulation deleteSubTreeManipulation = new DeleteSubTreeManipulation();
+      deleteSubTreeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+      SubstituteSubTreeManipulation substituteSubTreeManipulation = new SubstituteSubTreeManipulation();
+      substituteSubTreeManipulation.GetVariableInfo("OperatorLibrary").ActualName = "FunctionLibrary";
+
+      IOperator[] manipulators = new IOperator[] {
+        onepointShaker, fullTreeShaker,
+        changeNodeTypeManipulation,
+        cutOutNodeManipulation,
+        deleteSubTreeManipulation,
+        substituteSubTreeManipulation};
+
+      DoubleArrayData probabilities = new DoubleArrayData(new double[manipulators.Length]);
+      for (int i = 0; i < manipulators.Length; i++) {
+        probabilities.Data[i] = 1.0;
+        multibranch.AddSubOperator(manipulators[i]);
+      }
+      multibranch.GetVariableInfo("Probabilities").Local = true;
+      multibranch.AddVariable(new HeuristicLab.Core.Variable("Probabilities", probabilities));
+
+      manipulator.OperatorGraph.AddOperator(multibranch);
+      manipulator.OperatorGraph.InitialOperator = multibranch;
+      return manipulator;
+    }
+
+    protected internal override IOperator CreateBestSolutionProcessor() {
+      SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
+      MeanSquaredErrorEvaluator testMseEvaluator = new MeanSquaredErrorEvaluator();
+      testMseEvaluator.Name = "TestMeanSquaredErrorEvaluator";
+      testMseEvaluator.GetVariableInfo("MSE").ActualName = "TestQuality";
+      testMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
+      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
+      trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
+      trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      MeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
+      validationMapeEvaluator.Name = "ValidationMapeEvaluator";
+      validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
+      validationMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      MeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
+      testMapeEvaluator.Name = "TestMapeEvaluator";
+      testMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TestMAPE";
+      testMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
+      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
+      trainingMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
+      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
+      validationMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      testMapreEvaluator.Name = "TestMapreEvaluator";
+      testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
+      testMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      CoefficientOfDeterminationEvaluator trainingR2Evaluator = new CoefficientOfDeterminationEvaluator();
+      trainingR2Evaluator.Name = "TrainingR2Evaluator";
+      trainingR2Evaluator.GetVariableInfo("R2").ActualName = "TrainingR2";
+      trainingR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      CoefficientOfDeterminationEvaluator validationR2Evaluator = new CoefficientOfDeterminationEvaluator();
+      validationR2Evaluator.Name = "ValidationR2Evaluator";
+      validationR2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
+      validationR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      CoefficientOfDeterminationEvaluator testR2Evaluator = new CoefficientOfDeterminationEvaluator();
+      testR2Evaluator.Name = "TestR2Evaluator";
+      testR2Evaluator.GetVariableInfo("R2").ActualName = "TestR2";
+      testR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      ProgrammableOperator progOperator = new ProgrammableOperator();
+      progOperator.RemoveVariableInfo("Result");
+      progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
+      progOperator.Code = @"
+int evalSolutions = EvaluatedSolutions.Data;
+scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
+";
+      bestSolutionProcessor.AddSubOperator(testMseEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(validationMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(testMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(validationMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(testMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingR2Evaluator);
+      bestSolutionProcessor.AddSubOperator(validationR2Evaluator);
+      bestSolutionProcessor.AddSubOperator(testR2Evaluator);
+      bestSolutionProcessor.AddSubOperator(progOperator);
+      return bestSolutionProcessor;
+    }
+
+    protected internal override IOperator CreateLoggingOperator() {
+      CombinedOperator loggingOperator = new CombinedOperator();
+      loggingOperator.Name = "Logging";
+      SequentialProcessor seq = new SequentialProcessor();
+
+      DataCollector collector = new DataCollector();
+      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
+      names.Add(new StringData("BestQuality"));
+      names.Add(new StringData("AverageQuality"));
+      names.Add(new StringData("WorstQuality"));
+      names.Add(new StringData("BestValidationQuality"));
+      names.Add(new StringData("AverageValidationQuality"));
+      names.Add(new StringData("WorstValidationQuality"));
+      LinechartInjector lineChartInjector = new LinechartInjector();
+      lineChartInjector.GetVariableInfo("Linechart").ActualName = "Quality Linechart";
+      lineChartInjector.GetVariable("NumberOfLines").GetValue<IntData>().Data = 6;
+      QualityLogger qualityLogger = new QualityLogger();
+      QualityLogger validationQualityLogger = new QualityLogger();
+      validationQualityLogger.Name = "ValidationQualityLogger";
+      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
+
+      seq.AddSubOperator(collector);
+      seq.AddSubOperator(lineChartInjector);
+      seq.AddSubOperator(qualityLogger);
+      seq.AddSubOperator(validationQualityLogger);
+
+      loggingOperator.OperatorGraph.AddOperator(seq);
+      loggingOperator.OperatorGraph.InitialOperator = seq;
+      return loggingOperator;
+    }
+
+    public virtual IEditor CreateEditor() {
+      return new StandardGpEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new StandardGpEditor(this);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.Designer.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.Designer.cs	(revision 1287)
@@ -0,0 +1,380 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP.StructureIdentification {
+  partial class StandardGpEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.executeButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.viewProblemInitializationButton = new System.Windows.Forms.Button();
+      this.setProblemInitializationButton = new System.Windows.Forms.Button();
+      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
+      this.elitesTextBox = new System.Windows.Forms.TextBox();
+      this.problemInitializationLabel = new System.Windows.Forms.Label();
+      this.elitesLabel = new System.Windows.Forms.Label();
+      this.mutationRateTextBox = new System.Windows.Forms.TextBox();
+      this.mutationRateLabel = new System.Windows.Forms.Label();
+      this.maximumGenerationsTextBox = new System.Windows.Forms.TextBox();
+      this.maximumGenerationsLabel = new System.Windows.Forms.Label();
+      this.randomSeedTextBox = new System.Windows.Forms.TextBox();
+      this.populationSizeTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyLabel = new System.Windows.Forms.Label();
+      this.randomSeedLabel = new System.Windows.Forms.Label();
+      this.populationSizeLabel = new System.Windows.Forms.Label();
+      this.scopesTabPage = new System.Windows.Forms.TabPage();
+      this.scopeView = new HeuristicLab.Core.ScopeView();
+      this.abortButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.cloneEngineButton = new System.Windows.Forms.Button();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.scopesTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // executeButton
+      // 
+      this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.executeButton.Location = new System.Drawing.Point(0, 396);
+      this.executeButton.Name = "executeButton";
+      this.executeButton.Size = new System.Drawing.Size(75, 23);
+      this.executeButton.TabIndex = 1;
+      this.executeButton.Text = "&Execute";
+      this.executeButton.UseVisualStyleBackColor = true;
+      this.executeButton.Click += new System.EventHandler(this.executeButton_Click);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.scopesTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(526, 390);
+      this.tabControl.TabIndex = 0;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
+      this.parametersTabPage.Controls.Add(this.elitesTextBox);
+      this.parametersTabPage.Controls.Add(this.problemInitializationLabel);
+      this.parametersTabPage.Controls.Add(this.elitesLabel);
+      this.parametersTabPage.Controls.Add(this.mutationRateTextBox);
+      this.parametersTabPage.Controls.Add(this.mutationRateLabel);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsTextBox);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedTextBox);
+      this.parametersTabPage.Controls.Add(this.populationSizeTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedLabel);
+      this.parametersTabPage.Controls.Add(this.populationSizeLabel);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(518, 364);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // viewProblemInitializationButton
+      // 
+      this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 208);
+      this.viewProblemInitializationButton.Name = "viewProblemInitializationButton";
+      this.viewProblemInitializationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewProblemInitializationButton.TabIndex = 14;
+      this.viewProblemInitializationButton.Text = "View...";
+      this.viewProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.viewProblemInitializationButton.Click += new System.EventHandler(this.viewProblemInjectorButton_Click);
+      // 
+      // setProblemInitializationButton
+      // 
+      this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 208);
+      this.setProblemInitializationButton.Name = "setProblemInitializationButton";
+      this.setProblemInitializationButton.Size = new System.Drawing.Size(43, 20);
+      this.setProblemInitializationButton.TabIndex = 15;
+      this.setProblemInitializationButton.Text = "Set...";
+      this.setProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.setProblemInitializationButton.Click += new System.EventHandler(this.setProblemInitializationButton_Click);
+      // 
+      // problemInitializationTextBox
+      // 
+      this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 208);
+      this.problemInitializationTextBox.Name = "problemInitializationTextBox";
+      this.problemInitializationTextBox.ReadOnly = true;
+      this.problemInitializationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.problemInitializationTextBox.TabIndex = 13;
+      // 
+      // setRandomSeedRandomlyCheckBox
+      // 
+      this.setRandomSeedRandomlyCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyCheckBox.AutoSize = true;
+      this.setRandomSeedRandomlyCheckBox.Location = new System.Drawing.Point(218, 6);
+      this.setRandomSeedRandomlyCheckBox.Name = "setRandomSeedRandomlyCheckBox";
+      this.setRandomSeedRandomlyCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.setRandomSeedRandomlyCheckBox.TabIndex = 1;
+      this.setRandomSeedRandomlyCheckBox.UseVisualStyleBackColor = true;
+      this.setRandomSeedRandomlyCheckBox.CheckedChanged += new System.EventHandler(this.setRandomSeedRandomlyCheckBox_CheckedChanged);
+      // 
+      // elitesTextBox
+      // 
+      this.elitesTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesTextBox.Location = new System.Drawing.Point(218, 156);
+      this.elitesTextBox.Name = "elitesTextBox";
+      this.elitesTextBox.Size = new System.Drawing.Size(186, 20);
+      this.elitesTextBox.TabIndex = 11;
+      // 
+      // problemInitializationLabel
+      // 
+      this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationLabel.AutoSize = true;
+      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 211);
+      this.problemInitializationLabel.Name = "problemInitializationLabel";
+      this.problemInitializationLabel.Size = new System.Drawing.Size(105, 13);
+      this.problemInitializationLabel.TabIndex = 12;
+      this.problemInitializationLabel.Text = "&Problem Initialization:";
+      // 
+      // elitesLabel
+      // 
+      this.elitesLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesLabel.AutoSize = true;
+      this.elitesLabel.Location = new System.Drawing.Point(65, 159);
+      this.elitesLabel.Name = "elitesLabel";
+      this.elitesLabel.Size = new System.Drawing.Size(35, 13);
+      this.elitesLabel.TabIndex = 10;
+      this.elitesLabel.Text = "&Elites:";
+      // 
+      // mutationRateTextBox
+      // 
+      this.mutationRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateTextBox.Location = new System.Drawing.Point(218, 130);
+      this.mutationRateTextBox.Name = "mutationRateTextBox";
+      this.mutationRateTextBox.Size = new System.Drawing.Size(186, 20);
+      this.mutationRateTextBox.TabIndex = 9;
+      // 
+      // mutationRateLabel
+      // 
+      this.mutationRateLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateLabel.AutoSize = true;
+      this.mutationRateLabel.Location = new System.Drawing.Point(65, 133);
+      this.mutationRateLabel.Name = "mutationRateLabel";
+      this.mutationRateLabel.Size = new System.Drawing.Size(77, 13);
+      this.mutationRateLabel.TabIndex = 8;
+      this.mutationRateLabel.Text = "&Mutation Rate:";
+      // 
+      // maximumGenerationsTextBox
+      // 
+      this.maximumGenerationsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsTextBox.Location = new System.Drawing.Point(218, 104);
+      this.maximumGenerationsTextBox.Name = "maximumGenerationsTextBox";
+      this.maximumGenerationsTextBox.Size = new System.Drawing.Size(186, 20);
+      this.maximumGenerationsTextBox.TabIndex = 7;
+      // 
+      // maximumGenerationsLabel
+      // 
+      this.maximumGenerationsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsLabel.AutoSize = true;
+      this.maximumGenerationsLabel.Location = new System.Drawing.Point(65, 107);
+      this.maximumGenerationsLabel.Name = "maximumGenerationsLabel";
+      this.maximumGenerationsLabel.Size = new System.Drawing.Size(114, 13);
+      this.maximumGenerationsLabel.TabIndex = 6;
+      this.maximumGenerationsLabel.Text = "Maximum &Generations:";
+      // 
+      // randomSeedTextBox
+      // 
+      this.randomSeedTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedTextBox.Location = new System.Drawing.Point(218, 26);
+      this.randomSeedTextBox.Name = "randomSeedTextBox";
+      this.randomSeedTextBox.Size = new System.Drawing.Size(186, 20);
+      this.randomSeedTextBox.TabIndex = 3;
+      // 
+      // populationSizeTextBox
+      // 
+      this.populationSizeTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeTextBox.Location = new System.Drawing.Point(218, 78);
+      this.populationSizeTextBox.Name = "populationSizeTextBox";
+      this.populationSizeTextBox.Size = new System.Drawing.Size(186, 20);
+      this.populationSizeTextBox.TabIndex = 5;
+      // 
+      // setRandomSeedRandomlyLabel
+      // 
+      this.setRandomSeedRandomlyLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyLabel.AutoSize = true;
+      this.setRandomSeedRandomlyLabel.Location = new System.Drawing.Point(65, 6);
+      this.setRandomSeedRandomlyLabel.Name = "setRandomSeedRandomlyLabel";
+      this.setRandomSeedRandomlyLabel.Size = new System.Drawing.Size(147, 13);
+      this.setRandomSeedRandomlyLabel.TabIndex = 0;
+      this.setRandomSeedRandomlyLabel.Text = "Set &Random Seed Randomly:";
+      // 
+      // randomSeedLabel
+      // 
+      this.randomSeedLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedLabel.AutoSize = true;
+      this.randomSeedLabel.Location = new System.Drawing.Point(65, 29);
+      this.randomSeedLabel.Name = "randomSeedLabel";
+      this.randomSeedLabel.Size = new System.Drawing.Size(78, 13);
+      this.randomSeedLabel.TabIndex = 2;
+      this.randomSeedLabel.Text = "&Random Seed:";
+      // 
+      // populationSizeLabel
+      // 
+      this.populationSizeLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeLabel.AutoSize = true;
+      this.populationSizeLabel.Location = new System.Drawing.Point(65, 81);
+      this.populationSizeLabel.Name = "populationSizeLabel";
+      this.populationSizeLabel.Size = new System.Drawing.Size(83, 13);
+      this.populationSizeLabel.TabIndex = 4;
+      this.populationSizeLabel.Text = "&Population Size:";
+      // 
+      // scopesTabPage
+      // 
+      this.scopesTabPage.Controls.Add(this.scopeView);
+      this.scopesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.scopesTabPage.Name = "scopesTabPage";
+      this.scopesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.scopesTabPage.Size = new System.Drawing.Size(518, 364);
+      this.scopesTabPage.TabIndex = 2;
+      this.scopesTabPage.Text = "Scopes";
+      this.scopesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // scopeView
+      // 
+      this.scopeView.Caption = "Scope";
+      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeView.Location = new System.Drawing.Point(3, 3);
+      this.scopeView.Name = "scopeView";
+      this.scopeView.Scope = null;
+      this.scopeView.Size = new System.Drawing.Size(512, 358);
+      this.scopeView.TabIndex = 0;
+      // 
+      // abortButton
+      // 
+      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.abortButton.Enabled = false;
+      this.abortButton.Location = new System.Drawing.Point(81, 396);
+      this.abortButton.Name = "abortButton";
+      this.abortButton.Size = new System.Drawing.Size(75, 23);
+      this.abortButton.TabIndex = 2;
+      this.abortButton.Text = "&Abort";
+      this.abortButton.UseVisualStyleBackColor = true;
+      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Location = new System.Drawing.Point(162, 396);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(75, 23);
+      this.resetButton.TabIndex = 3;
+      this.resetButton.Text = "&Reset";
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // cloneEngineButton
+      // 
+      this.cloneEngineButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cloneEngineButton.Location = new System.Drawing.Point(420, 396);
+      this.cloneEngineButton.Name = "cloneEngineButton";
+      this.cloneEngineButton.Size = new System.Drawing.Size(106, 23);
+      this.cloneEngineButton.TabIndex = 4;
+      this.cloneEngineButton.Text = "&Clone Engine...";
+      this.cloneEngineButton.UseVisualStyleBackColor = true;
+      this.cloneEngineButton.Click += new System.EventHandler(this.cloneEngineButton_Click);
+      // 
+      // StandardGpEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.cloneEngineButton);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.abortButton);
+      this.Controls.Add(this.executeButton);
+      this.Name = "StandardGpEditor";
+      this.Size = new System.Drawing.Size(526, 419);
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.scopesTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button executeButton;
+    protected System.Windows.Forms.TabControl tabControl;
+    protected System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.Button abortButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.TextBox mutationRateTextBox;
+    private System.Windows.Forms.Label mutationRateLabel;
+    private System.Windows.Forms.TextBox populationSizeTextBox;
+    private System.Windows.Forms.Label populationSizeLabel;
+    private System.Windows.Forms.TabPage scopesTabPage;
+    private System.Windows.Forms.TextBox maximumGenerationsTextBox;
+    private System.Windows.Forms.Label maximumGenerationsLabel;
+    private System.Windows.Forms.TextBox elitesTextBox;
+    private System.Windows.Forms.Label elitesLabel;
+    private System.Windows.Forms.TextBox randomSeedTextBox;
+    private System.Windows.Forms.Label setRandomSeedRandomlyLabel;
+    private System.Windows.Forms.Label randomSeedLabel;
+    private System.Windows.Forms.CheckBox setRandomSeedRandomlyCheckBox;
+    private System.Windows.Forms.Label problemInitializationLabel;
+    private System.Windows.Forms.Button cloneEngineButton;
+    private System.Windows.Forms.TextBox problemInitializationTextBox;
+    private System.Windows.Forms.Button setProblemInitializationButton;
+    private HeuristicLab.Core.ScopeView scopeView;
+    private System.Windows.Forms.Button viewProblemInitializationButton;
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.cs	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.cs	(revision 1287)
@@ -0,0 +1,140 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public partial class StandardGpEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    public StandardGP StandardGP {
+      get { return (StandardGP)Item; }
+      set { base.Item = value; }
+    }
+
+    public StandardGpEditor() {
+      InitializeComponent();
+    }
+    public StandardGpEditor(StandardGP sgp)
+      : this() {
+      StandardGP = sgp;
+    }
+
+    protected override void RemoveItemEvents() {
+      StandardGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      StandardGP.Engine.Finished -= new EventHandler(Engine_Finished);
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      StandardGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      StandardGP.Engine.Finished += new EventHandler(Engine_Finished);
+      SetDataBinding();
+      scopeView.Scope = StandardGP.Engine.GlobalScope;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if(StandardGP == null) {
+        tabControl.Enabled = false;
+      } else {
+        tabControl.Enabled = true;
+        problemInitializationTextBox.Text = StandardGP.ProblemInjector.GetType().Name;
+      }
+    }
+
+    protected virtual void SetDataBinding() {
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", StandardGP, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", StandardGP, "Seed");
+      populationSizeTextBox.DataBindings.Add("Text", StandardGP, "PopulationSize");
+      maximumGenerationsTextBox.DataBindings.Add("Text", StandardGP, "MaxGenerations");
+      mutationRateTextBox.DataBindings.Add("Text", StandardGP, "MutationRate");
+      elitesTextBox.DataBindings.Add("Text", StandardGP, "Elites");
+    }
+
+    #region Button Events
+    private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
+      IView view = StandardGP.ProblemInjector.CreateView();
+      if(view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+
+    private void setProblemInitializationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        StandardGP.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = StandardGP.ProblemInjector.GetType().Name;
+      }
+    }
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      resetButton.Enabled = false;
+      StandardGP.Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      StandardGP.Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      StandardGP.Engine.Reset();
+    }
+    private void cloneEngineButton_Click(object sender, EventArgs e) {
+      IEngine clone = (IEngine)StandardGP.Engine.Clone();
+      IEditor editor = ((IEditable)clone).CreateEditor();
+      PluginManager.ControlManager.ShowControl(editor);
+    }
+    #endregion
+
+    #region Engine Events
+    private delegate void OnExceptionEventDelegate(object sender, ExceptionEventArgs e);
+    private void Engine_ExceptionOccurred(object sender, ExceptionEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Exception);
+    }
+    private void Engine_Finished(object sender, EventArgs e) {
+      if(InvokeRequired)
+        Invoke((EventHandler)Engine_Finished, sender, e);
+      else {
+        scopeView.Refresh();
+        executeButton.Enabled = true;
+        abortButton.Enabled = false;
+        resetButton.Enabled = true;
+      }
+    }
+    #endregion
+
+    private void setRandomSeedRandomlyCheckBox_CheckedChanged(object sender, EventArgs e) {
+      randomSeedTextBox.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+      randomSeedLabel.Enabled = !setRandomSeedRandomlyCheckBox.Checked;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.resx
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.resx	(revision 1287)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/StandardGpEditor.resx	(revision 1287)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjector.cs	(revision 1286)
+++ 	(revision )
@@ -1,90 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
-using Core = HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.StructureIdentification {
-  public class StructIdProblemInjector : Core.OperatorBase {
-    public override string Description {
-      get { return @"Injects the necessary variables for a structure identification problem."; }
-    }
-
-    public StructIdProblemInjector()
-      : base() {
-      AddVariableInfo(new Core.VariableInfo("Dataset", "Dataset", typeof(Dataset), Core.VariableKind.New));
-      GetVariableInfo("Dataset").Local = true;
-      AddVariable(new Core.Variable("Dataset", new Dataset()));
-
-      AddVariableInfo(new Core.VariableInfo("TargetVariable", "TargetVariable", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("TargetVariable").Local = true;
-      AddVariable(new Core.Variable("TargetVariable", new IntData()));
-
-      AddVariableInfo(new Core.VariableInfo("AllowedFeatures", "Indexes of allowed input variables", typeof(ItemList<IntData>), Core.VariableKind.New));
-      GetVariableInfo("AllowedFeatures").Local = true;
-      AddVariable(new Core.Variable("AllowedFeatures", new ItemList<IntData>()));
-
-      AddVariableInfo(new Core.VariableInfo("TrainingSamplesStart", "TrainingSamplesStart", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("TrainingSamplesStart").Local = true;
-      AddVariable(new Core.Variable("TrainingSamplesStart", new IntData()));
-
-      AddVariableInfo(new Core.VariableInfo("TrainingSamplesEnd", "TrainingSamplesEnd", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("TrainingSamplesEnd").Local = true;
-      AddVariable(new Core.Variable("TrainingSamplesEnd", new IntData()));
-
-      AddVariableInfo(new Core.VariableInfo("ValidationSamplesStart", "ValidationSamplesStart", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("ValidationSamplesStart").Local = true;
-      AddVariable(new Core.Variable("ValidationSamplesStart", new IntData()));
-
-      AddVariableInfo(new Core.VariableInfo("ValidationSamplesEnd", "ValidationSamplesEnd", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("ValidationSamplesEnd").Local = true;
-      AddVariable(new Core.Variable("ValidationSamplesEnd", new IntData()));
-
-      AddVariableInfo(new Core.VariableInfo("TestSamplesStart", "TestSamplesStart", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("TestSamplesStart").Local = true;
-      AddVariable(new Core.Variable("TestSamplesStart", new IntData()));
-
-      AddVariableInfo(new Core.VariableInfo("TestSamplesEnd", "TestSamplesEnd", typeof(IntData), Core.VariableKind.New));
-      GetVariableInfo("TestSamplesEnd").Local = true;
-      AddVariable(new Core.Variable("TestSamplesEnd", new IntData()));
-    }
-
-    public override Core.IView CreateView() {
-      return new StructIdProblemInjectorView(this);
-    }
-
-    public override Core.IOperation Apply(Core.IScope scope) {
-      foreach(Core.VariableInfo info in VariableInfos) {
-        if(info.Local) {
-          Core.IVariable var = GetVariable(info.FormalName);
-          if(var != null) scope.AddVariable(new Core.Variable(info.ActualName, (Core.IItem)var.Value.Clone()));
-        }
-      }
-      return null;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.Designer.cs	(revision 1286)
+++ 	(revision )
@@ -1,213 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.GP.StructureIdentification {
-  partial class StructIdProblemInjectorView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.importInstanceButton = new System.Windows.Forms.Button();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.dataTabPage = new System.Windows.Forms.TabPage();
-      this.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
-      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
-      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
-      this.tabPage1 = new System.Windows.Forms.TabPage();
-      this.variablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
-      this.descriptionTabPage = new System.Windows.Forms.TabPage();
-      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
-      this.tabControl.SuspendLayout();
-      this.dataTabPage.SuspendLayout();
-      this.variableInfosTabPage.SuspendLayout();
-      this.tabPage1.SuspendLayout();
-      this.descriptionTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // importInstanceButton
-      // 
-      this.importInstanceButton.Location = new System.Drawing.Point(6, 6);
-      this.importInstanceButton.Name = "importInstanceButton";
-      this.importInstanceButton.Size = new System.Drawing.Size(129, 21);
-      this.importInstanceButton.TabIndex = 6;
-      this.importInstanceButton.Text = "&Import...";
-      this.importInstanceButton.UseVisualStyleBackColor = true;
-      this.importInstanceButton.Click += new System.EventHandler(this.importInstanceButton_Click);
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "txt";
-      this.openFileDialog.FileName = "txt";
-      this.openFileDialog.Filter = "Text files|*.txt|All files|*.*";
-      this.openFileDialog.Title = "Import StructId File";
-      // 
-      // tabControl
-      // 
-      this.tabControl.Controls.Add(this.dataTabPage);
-      this.tabControl.Controls.Add(this.variableInfosTabPage);
-      this.tabControl.Controls.Add(this.tabPage1);
-      this.tabControl.Controls.Add(this.descriptionTabPage);
-      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tabControl.Location = new System.Drawing.Point(0, 0);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(507, 451);
-      this.tabControl.TabIndex = 0;
-      // 
-      // dataTabPage
-      // 
-      this.dataTabPage.Controls.Add(this.datasetView);
-      this.dataTabPage.Controls.Add(this.importInstanceButton);
-      this.dataTabPage.Location = new System.Drawing.Point(4, 22);
-      this.dataTabPage.Name = "dataTabPage";
-      this.dataTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.dataTabPage.Size = new System.Drawing.Size(499, 425);
-      this.dataTabPage.TabIndex = 0;
-      this.dataTabPage.Text = "Data";
-      this.dataTabPage.UseVisualStyleBackColor = true;
-      // 
-      // datasetView
-      // 
-      this.datasetView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.datasetView.Caption = "Editor";
-      this.datasetView.Dataset = null;
-      this.datasetView.Filename = null;
-      this.datasetView.Location = new System.Drawing.Point(6, 33);
-      this.datasetView.Name = "datasetView";
-      this.datasetView.Size = new System.Drawing.Size(487, 386);
-      this.datasetView.TabIndex = 7;
-      // 
-      // variableInfosTabPage
-      // 
-      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
-      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
-      this.variableInfosTabPage.Name = "variableInfosTabPage";
-      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.variableInfosTabPage.Size = new System.Drawing.Size(499, 425);
-      this.variableInfosTabPage.TabIndex = 1;
-      this.variableInfosTabPage.Text = "Variable Infos";
-      this.variableInfosTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorBaseVariableInfosView
-      // 
-      this.operatorBaseVariableInfosView.Caption = "Operator";
-      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
-      this.operatorBaseVariableInfosView.Operator = null;
-      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(493, 419);
-      this.operatorBaseVariableInfosView.TabIndex = 0;
-      // 
-      // tabPage1
-      // 
-      this.tabPage1.Controls.Add(this.variablesView);
-      this.tabPage1.Location = new System.Drawing.Point(4, 22);
-      this.tabPage1.Name = "tabPage1";
-      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage1.Size = new System.Drawing.Size(499, 425);
-      this.tabPage1.TabIndex = 3;
-      this.tabPage1.Text = "Variables";
-      this.tabPage1.UseVisualStyleBackColor = true;
-      // 
-      // variablesView
-      // 
-      this.variablesView.Caption = "Operator";
-      this.variablesView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variablesView.Location = new System.Drawing.Point(3, 3);
-      this.variablesView.Name = "variablesView";
-      this.variablesView.Operator = null;
-      this.variablesView.Size = new System.Drawing.Size(493, 419);
-      this.variablesView.TabIndex = 0;
-      // 
-      // descriptionTabPage
-      // 
-      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
-      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
-      this.descriptionTabPage.Name = "descriptionTabPage";
-      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.descriptionTabPage.Size = new System.Drawing.Size(499, 425);
-      this.descriptionTabPage.TabIndex = 2;
-      this.descriptionTabPage.Text = "Description";
-      this.descriptionTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorBaseDescriptionView
-      // 
-      this.operatorBaseDescriptionView.Caption = "Operator";
-      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
-      this.operatorBaseDescriptionView.Operator = null;
-      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(493, 419);
-      this.operatorBaseDescriptionView.TabIndex = 0;
-      // 
-      // StructIdProblemInjectorView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tabControl);
-      this.Name = "StructIdProblemInjectorView";
-      this.Size = new System.Drawing.Size(507, 451);
-      this.tabControl.ResumeLayout(false);
-      this.dataTabPage.ResumeLayout(false);
-      this.variableInfosTabPage.ResumeLayout(false);
-      this.tabPage1.ResumeLayout(false);
-      this.descriptionTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Button importInstanceButton;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage dataTabPage;
-    private System.Windows.Forms.TabPage variableInfosTabPage;
-    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
-    private System.Windows.Forms.TabPage descriptionTabPage;
-    private HeuristicLab.Core.OperatorBaseDescriptionView operatorBaseDescriptionView;
-    private System.Windows.Forms.TabPage tabPage1;
-    private HeuristicLab.Core.OperatorBaseVariablesView variablesView;
-    private HeuristicLab.DataAnalysis.DatasetView datasetView;
-  }
-}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.cs	(revision 1286)
+++ 	(revision )
@@ -1,154 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.StructureIdentification {
-  public partial class StructIdProblemInjectorView : ViewBase {
-    public StructIdProblemInjector StructIdProblemInjector {
-      get { return (StructIdProblemInjector)Item; }
-      set { base.Item = value; }
-    }
-
-    public StructIdProblemInjectorView()
-      : base() {
-      InitializeComponent();
-    }
-    public StructIdProblemInjectorView(StructIdProblemInjector structIdProblemInjector)
-      : this() {
-      StructIdProblemInjector = structIdProblemInjector;
-      variablesView.Operator = structIdProblemInjector;
-      variablesView.Update();
-    }
-
-    protected override void RemoveItemEvents() {
-      operatorBaseVariableInfosView.Operator = null;
-      operatorBaseDescriptionView.Operator = null;
-      base.RemoveItemEvents();
-    }
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      operatorBaseVariableInfosView.Operator = StructIdProblemInjector;
-      operatorBaseDescriptionView.Operator = StructIdProblemInjector;
-    }
-
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if(StructIdProblemInjector == null) {
-        importInstanceButton.Enabled = false;
-      } else {
-        Dataset dataset = (Dataset)StructIdProblemInjector.GetVariable("Dataset").Value;
-        datasetView.Dataset = dataset;
-        importInstanceButton.Enabled = true;
-      }
-    }
-
-    private void importInstanceButton_Click(object sender, EventArgs e) {
-      if(openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        DatasetParser parser = new DatasetParser();
-        bool success = false;
-        try {
-          try {
-            parser.Import(openFileDialog.FileName, true);
-            success = true;
-          } catch(DataFormatException ex) {
-            ShowWarningMessageBox(ex);
-            // not possible to parse strictly => clear and try to parse non-strict
-            parser.Reset();
-            parser.Import(openFileDialog.FileName, false);
-            success = true;
-          }
-        } catch(DataFormatException ex) {
-          // if the non-strict parsing also failed then show the exception
-          ShowErrorMessageBox(ex);
-        }
-        if(success) {
-          Dataset dataset = (Dataset)StructIdProblemInjector.GetVariable("Dataset").Value;
-          dataset.Rows = parser.Rows;
-          dataset.Columns = parser.Columns;
-          dataset.VariableNames = parser.VariableNames;
-          dataset.Name = parser.ProblemName;
-          dataset.Samples = new double[dataset.Rows * dataset.Columns];
-          Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
-          TrySetVariable("TrainingSamplesStart", parser.TrainingSamplesStart);
-          TrySetVariable("TrainingSamplesStart", parser.TrainingSamplesStart);
-          TrySetVariable("TrainingSamplesEnd", parser.TrainingSamplesEnd);
-          TrySetVariable("ValidationSamplesStart", parser.ValidationSamplesStart);
-          TrySetVariable("ValidationSamplesEnd", parser.ValidationSamplesEnd);
-          TrySetVariable("TestSamplesStart", parser.TestSamplesStart);
-          TrySetVariable("TestSamplesEnd", parser.TestSamplesEnd);
-          TrySetVariable("TargetVariable", parser.TargetVariable);
-
-          IVariable var = StructIdProblemInjector.GetVariable("AllowedFeatures");
-          if(var != null) {
-            ItemList<IntData> allowedFeatures = (ItemList<IntData>)var.Value;
-            allowedFeatures.Clear();
-            List<int> nonInputVariables = parser.NonInputVariables;
-            for(int i = 0; i < dataset.Columns; i++) {
-              if(!nonInputVariables.Contains(i)) allowedFeatures.Add(new IntData(i));
-            }
-          }
-          Refresh();
-        }
-      }
-    }
-
-    private void TrySetVariable(string name, int value) {
-      IVariable var = StructIdProblemInjector.GetVariable(name);
-      if(var != null) {
-        ((IntData)var.Value).Data = value;
-      }
-    }
-
-    private void ShowWarningMessageBox(Exception ex) {
-      MessageBox.Show(ex.Message,
-                      "Warning - " + ex.GetType().Name,
-                      MessageBoxButtons.OK,
-                      MessageBoxIcon.Warning);
-    }
-    private void ShowErrorMessageBox(Exception ex) {
-      MessageBox.Show(BuildErrorMessage(ex),
-                      "Error - " + ex.GetType().Name,
-                      MessageBoxButtons.OK,
-                      MessageBoxIcon.Error);
-    }
-    private string BuildErrorMessage(Exception ex) {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
-
-      while(ex.InnerException != null) {
-        ex = ex.InnerException;
-        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
-      }
-      return sb.ToString();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.resx
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.resx	(revision 1286)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: trunk/sources/HeuristicLab.Grid/HeuristicLab.Grid.csproj
===================================================================
--- trunk/sources/HeuristicLab.Grid/HeuristicLab.Grid.csproj	(revision 1286)
+++ trunk/sources/HeuristicLab.Grid/HeuristicLab.Grid.csproj	(revision 1287)
@@ -55,4 +55,8 @@
     <Reference Include="System.Core">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.SQLite\System.Data.SQLite.DLL</HintPath>
     </Reference>
     <Reference Include="System.Drawing" />
Index: trunk/sources/HeuristicLab.Grid/ServerForm.cs
===================================================================
--- trunk/sources/HeuristicLab.Grid/ServerForm.cs	(revision 1286)
+++ trunk/sources/HeuristicLab.Grid/ServerForm.cs	(revision 1287)
@@ -66,5 +66,5 @@
       internalHost = new ServiceHost(jobStore, new Uri(internalAddressTextBox.Text));
       ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
-      throttlingBehavior.MaxConcurrentSessions = 20;
+      throttlingBehavior.MaxConcurrentSessions = 100;
       internalHost.Description.Behaviors.Add(throttlingBehavior);
       try {
@@ -73,5 +73,4 @@
         binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
         binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
-
         externalHost.AddServiceEndpoint(typeof(IGridServer), binding, externalAddressTextBox.Text);
         externalHost.Open();
Index: trunk/sources/HeuristicLab.sln
===================================================================
--- trunk/sources/HeuristicLab.sln	(revision 1286)
+++ trunk/sources/HeuristicLab.sln	(revision 1287)
@@ -4,4 +4,5 @@
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{96396439-A764-4022-A8D2-BE021449B8D1}"
 	ProjectSection(SolutionItems) = preProject
+		ConfigMerger.exe = ConfigMerger.exe
 		..\documentation\License\gpl-3.0.txt = ..\documentation\License\gpl-3.0.txt
 		PreBuildEvent.cmd = PreBuildEvent.cmd
@@ -74,6 +75,4 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.DB", "HeuristicLab.CEDMA.DB\HeuristicLab.CEDMA.DB.csproj", "{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.Operators", "HeuristicLab.CEDMA.Operators\HeuristicLab.CEDMA.Operators.csproj", "{6BC692D4-8843-4945-ACE4-5B41ED55476A}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.Server", "HeuristicLab.CEDMA.Server\HeuristicLab.CEDMA.Server.csproj", "{F05D261A-4F7D-46C9-AB9C-21FD4566D719}"
 EndProject
@@ -129,10 +128,4 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.Console", "HeuristicLab.Hive.Server.Console\HeuristicLab.Hive.Server.Console.csproj", "{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.JobBase", "HeuristicLab.Hive.JobBase\HeuristicLab.Hive.JobBase.csproj", "{21187322-52DD-4243-80A4-A85F0263E63B}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.IntVector", "HeuristicLab.IntVector\HeuristicLab.IntVector.csproj", "{85FA46C6-761E-4098-9EF7-060ECC386396}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Assignment.QAP", "HeuristicLab.Assignment.QAP\HeuristicLab.Assignment.QAP.csproj", "{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}"
 EndProject
 Global
@@ -142,4 +135,6 @@
 		Debug|Any CPU = Debug|Any CPU
 		Debug|x86 = Debug|x86
+		GP Debug|Any CPU = GP Debug|Any CPU
+		GP Debug|x86 = GP Debug|x86
 		Release|Any CPU = Release|Any CPU
 		Release|x86 = Release|x86
@@ -148,6 +143,6 @@
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|x86.Build.0 = Debug|x86
@@ -156,4 +151,8 @@
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Debug|x86.ActiveCfg = Debug|x86
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Debug|x86.Build.0 = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.GP Debug|x86.ActiveCfg = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.GP Debug|x86.Build.0 = Debug|x86
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -164,6 +163,6 @@
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Visualization Debug|x86.Build.0 = Debug|x86
-		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -171,4 +170,7 @@
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|x86.ActiveCfg = Debug|x86
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|x86.Build.0 = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.GP Debug|x86.ActiveCfg = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.GP Debug|x86.Build.0 = Debug|x86
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -179,6 +181,6 @@
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Visualization Debug|x86.Build.0 = Debug|x86
-		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -186,4 +188,7 @@
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|x86.ActiveCfg = Debug|x86
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|x86.Build.0 = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.GP Debug|x86.ActiveCfg = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.GP Debug|x86.Build.0 = Debug|x86
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -194,6 +199,6 @@
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Visualization Debug|x86.Build.0 = Debug|x86
-		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -201,4 +206,7 @@
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|x86.ActiveCfg = Debug|x86
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|x86.Build.0 = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.GP Debug|x86.ActiveCfg = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.GP Debug|x86.Build.0 = Debug|x86
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -208,6 +216,6 @@
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Visualization Debug|x86.Build.0 = Debug|x86
-		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -215,4 +223,7 @@
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|x86.ActiveCfg = Debug|x86
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|x86.Build.0 = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.GP Debug|x86.ActiveCfg = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.GP Debug|x86.Build.0 = Debug|x86
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -222,6 +233,6 @@
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Visualization Debug|x86.Build.0 = Debug|x86
-		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -229,4 +240,7 @@
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|x86.ActiveCfg = Debug|x86
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|x86.Build.0 = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.GP Debug|x86.ActiveCfg = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.GP Debug|x86.Build.0 = Debug|x86
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -237,6 +251,6 @@
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Visualization Debug|x86.Build.0 = Debug|x86
-		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -244,4 +258,7 @@
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|x86.ActiveCfg = Debug|x86
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|x86.Build.0 = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.GP Debug|x86.ActiveCfg = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.GP Debug|x86.Build.0 = Debug|x86
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -251,6 +268,6 @@
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Visualization Debug|x86.Build.0 = Debug|x86
-		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -258,4 +275,7 @@
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|x86.ActiveCfg = Debug|x86
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|x86.Build.0 = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.GP Debug|x86.ActiveCfg = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.GP Debug|x86.Build.0 = Debug|x86
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -265,6 +285,6 @@
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Visualization Debug|x86.Build.0 = Debug|x86
-		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -272,4 +292,7 @@
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|x86.ActiveCfg = Debug|x86
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|x86.Build.0 = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.GP Debug|x86.ActiveCfg = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.GP Debug|x86.Build.0 = Debug|x86
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -279,6 +302,6 @@
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{B4BE8E53-BA06-4237-9A01-24255F880201}.Visualization Debug|x86.Build.0 = Debug|x86
-		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -286,4 +309,7 @@
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|x86.ActiveCfg = Debug|x86
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|x86.Build.0 = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.GP Debug|x86.ActiveCfg = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.GP Debug|x86.Build.0 = Debug|x86
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -293,6 +319,6 @@
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Visualization Debug|x86.Build.0 = Debug|x86
-		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -300,4 +326,7 @@
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|x86.ActiveCfg = Debug|x86
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|x86.Build.0 = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.GP Debug|x86.ActiveCfg = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.GP Debug|x86.Build.0 = Debug|x86
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -307,6 +336,6 @@
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Visualization Debug|x86.Build.0 = Debug|x86
-		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -314,4 +343,7 @@
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|x86.ActiveCfg = Debug|x86
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|x86.Build.0 = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.GP Debug|x86.ActiveCfg = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.GP Debug|x86.Build.0 = Debug|x86
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -321,6 +353,6 @@
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{F5614C53-153C-4A37-A608-121E1C087F07}.Visualization Debug|x86.Build.0 = Debug|x86
-		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -328,4 +360,7 @@
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|x86.ActiveCfg = Debug|x86
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|x86.Build.0 = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.GP Debug|x86.ActiveCfg = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.GP Debug|x86.Build.0 = Debug|x86
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -335,6 +370,6 @@
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Visualization Debug|x86.Build.0 = Debug|x86
-		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -342,4 +377,7 @@
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|x86.ActiveCfg = Debug|x86
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|x86.Build.0 = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.GP Debug|x86.ActiveCfg = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.GP Debug|x86.Build.0 = Debug|x86
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -349,6 +387,6 @@
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{205898D3-2717-4686-AF17-52409B7EC0C6}.Visualization Debug|x86.Build.0 = Debug|x86
-		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -356,4 +394,7 @@
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|x86.ActiveCfg = Debug|x86
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|x86.Build.0 = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.GP Debug|x86.ActiveCfg = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.GP Debug|x86.Build.0 = Debug|x86
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -363,6 +404,6 @@
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Visualization Debug|x86.Build.0 = Debug|x86
-		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -370,4 +411,7 @@
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|x86.ActiveCfg = Debug|x86
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|x86.Build.0 = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.GP Debug|x86.ActiveCfg = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.GP Debug|x86.Build.0 = Debug|x86
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -377,6 +421,6 @@
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Visualization Debug|x86.Build.0 = Debug|x86
-		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -384,4 +428,7 @@
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|x86.ActiveCfg = Debug|x86
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|x86.Build.0 = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.GP Debug|x86.ActiveCfg = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.GP Debug|x86.Build.0 = Debug|x86
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -391,6 +438,6 @@
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{B462D3CC-8866-42F0-9832-AD0967613B72}.Visualization Debug|x86.Build.0 = Debug|x86
-		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -398,4 +445,7 @@
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|x86.ActiveCfg = Debug|x86
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|x86.Build.0 = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.GP Debug|x86.ActiveCfg = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.GP Debug|x86.Build.0 = Debug|x86
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -405,6 +455,6 @@
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Visualization Debug|x86.Build.0 = Debug|x86
-		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -412,4 +462,7 @@
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|x86.ActiveCfg = Debug|x86
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|x86.Build.0 = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.GP Debug|x86.ActiveCfg = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.GP Debug|x86.Build.0 = Debug|x86
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -419,6 +472,6 @@
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Visualization Debug|x86.Build.0 = Debug|x86
-		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -426,4 +479,7 @@
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|x86.ActiveCfg = Debug|x86
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|x86.Build.0 = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.GP Debug|x86.ActiveCfg = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.GP Debug|x86.Build.0 = Debug|x86
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -433,6 +489,6 @@
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Visualization Debug|x86.Build.0 = Debug|x86
-		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -440,4 +496,7 @@
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|x86.ActiveCfg = Debug|x86
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|x86.Build.0 = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.GP Debug|x86.ActiveCfg = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.GP Debug|x86.Build.0 = Debug|x86
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -448,6 +507,6 @@
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Visualization Debug|x86.Build.0 = Debug|x86
-		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -455,4 +514,8 @@
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|x86.ActiveCfg = Debug|x86
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|x86.Build.0 = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.GP Debug|x86.ActiveCfg = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.GP Debug|x86.Build.0 = Debug|x86
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -462,6 +525,6 @@
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Visualization Debug|x86.Build.0 = Debug|x86
-		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -469,4 +532,7 @@
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|x86.ActiveCfg = Debug|x86
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|x86.Build.0 = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.GP Debug|x86.ActiveCfg = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.GP Debug|x86.Build.0 = Debug|x86
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -476,6 +542,6 @@
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Visualization Debug|x86.Build.0 = Debug|x86
-		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -483,4 +549,7 @@
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|x86.ActiveCfg = Debug|x86
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|x86.Build.0 = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.GP Debug|x86.ActiveCfg = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.GP Debug|x86.Build.0 = Debug|x86
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -490,6 +559,6 @@
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Visualization Debug|x86.Build.0 = Debug|x86
-		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -497,4 +566,7 @@
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|x86.ActiveCfg = Debug|x86
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|x86.Build.0 = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.GP Debug|x86.ActiveCfg = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.GP Debug|x86.Build.0 = Debug|x86
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -504,6 +576,6 @@
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Visualization Debug|x86.Build.0 = Debug|x86
-		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -511,4 +583,7 @@
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|x86.ActiveCfg = Debug|x86
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|x86.Build.0 = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.GP Debug|x86.ActiveCfg = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.GP Debug|x86.Build.0 = Debug|x86
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -518,6 +593,6 @@
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Visualization Debug|x86.Build.0 = Debug|x86
-		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -525,4 +600,7 @@
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|x86.ActiveCfg = Debug|x86
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|x86.Build.0 = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.GP Debug|x86.ActiveCfg = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.GP Debug|x86.Build.0 = Debug|x86
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -532,6 +610,6 @@
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Visualization Debug|x86.Build.0 = Debug|x86
-		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -539,4 +617,7 @@
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|x86.ActiveCfg = Debug|x86
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|x86.Build.0 = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.GP Debug|x86.ActiveCfg = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.GP Debug|x86.Build.0 = Debug|x86
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -546,6 +627,6 @@
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Visualization Debug|x86.Build.0 = Debug|x86
-		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -553,4 +634,7 @@
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|x86.ActiveCfg = Debug|x86
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|x86.Build.0 = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.GP Debug|x86.ActiveCfg = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.GP Debug|x86.Build.0 = Debug|x86
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -560,6 +644,6 @@
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Visualization Debug|x86.Build.0 = Debug|x86
-		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -567,4 +651,7 @@
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|x86.ActiveCfg = Debug|x86
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|x86.Build.0 = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.GP Debug|x86.ActiveCfg = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.GP Debug|x86.Build.0 = Debug|x86
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -574,6 +661,6 @@
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Visualization Debug|x86.Build.0 = Debug|x86
-		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -581,4 +668,7 @@
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|x86.ActiveCfg = Debug|x86
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|x86.Build.0 = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.GP Debug|x86.ActiveCfg = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.GP Debug|x86.Build.0 = Debug|x86
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -588,6 +678,6 @@
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Visualization Debug|x86.Build.0 = Debug|x86
-		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|x86.Build.0 = Debug|x86
@@ -596,4 +686,8 @@
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Debug|x86.ActiveCfg = Debug|x86
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Debug|x86.Build.0 = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.GP Debug|x86.ActiveCfg = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.GP Debug|x86.Build.0 = Debug|x86
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -603,6 +697,6 @@
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Visualization Debug|x86.Build.0 = Debug|x86
-		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|x86.Build.0 = Debug|x86
@@ -611,4 +705,8 @@
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Debug|x86.ActiveCfg = Debug|x86
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Debug|x86.Build.0 = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.GP Debug|x86.ActiveCfg = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.GP Debug|x86.Build.0 = Debug|x86
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -618,21 +716,6 @@
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Visualization Debug|x86.Build.0 = Debug|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|x86.Build.0 = Debug|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|x86.ActiveCfg = Debug|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|x86.Build.0 = Debug|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|x86.ActiveCfg = Release|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|x86.Build.0 = Release|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Visualization Debug|x86.ActiveCfg = Debug|x86
-		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Visualization Debug|x86.Build.0 = Debug|x86
-		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|x86.Build.0 = Debug|x86
@@ -641,4 +724,8 @@
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Debug|x86.ActiveCfg = Debug|x86
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Debug|x86.Build.0 = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.GP Debug|x86.ActiveCfg = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.GP Debug|x86.Build.0 = Debug|x86
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -648,6 +735,6 @@
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Visualization Debug|x86.Build.0 = Debug|x86
-		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|x86.Build.0 = Debug|x86
@@ -656,4 +743,8 @@
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Debug|x86.ActiveCfg = Debug|x86
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Debug|x86.Build.0 = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.GP Debug|x86.ActiveCfg = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.GP Debug|x86.Build.0 = Debug|x86
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -663,6 +754,6 @@
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Visualization Debug|x86.Build.0 = Debug|x86
-		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -670,4 +761,7 @@
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|x86.ActiveCfg = Debug|x86
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|x86.Build.0 = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.GP Debug|x86.ActiveCfg = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.GP Debug|x86.Build.0 = Debug|x86
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -677,6 +771,6 @@
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Visualization Debug|x86.Build.0 = Debug|x86
-		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -684,4 +778,7 @@
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|x86.ActiveCfg = Debug|x86
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|x86.Build.0 = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.GP Debug|x86.ActiveCfg = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.GP Debug|x86.Build.0 = Debug|x86
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -691,6 +788,6 @@
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Visualization Debug|x86.Build.0 = Debug|x86
-		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|x86.Build.0 = Debug|x86
@@ -699,4 +796,8 @@
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Debug|x86.ActiveCfg = Debug|x86
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Debug|x86.Build.0 = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.GP Debug|x86.ActiveCfg = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.GP Debug|x86.Build.0 = Debug|x86
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -706,6 +807,6 @@
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Visualization Debug|x86.Build.0 = Debug|x86
-		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -713,4 +814,7 @@
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|x86.ActiveCfg = Debug|x86
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|x86.Build.0 = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.GP Debug|x86.ActiveCfg = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.GP Debug|x86.Build.0 = Debug|x86
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -720,6 +824,6 @@
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Visualization Debug|x86.Build.0 = Debug|x86
-		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -727,4 +831,7 @@
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|x86.ActiveCfg = Debug|x86
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|x86.Build.0 = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.GP Debug|x86.ActiveCfg = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.GP Debug|x86.Build.0 = Debug|x86
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -734,6 +841,6 @@
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Visualization Debug|x86.Build.0 = Debug|x86
-		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -741,4 +848,7 @@
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|x86.ActiveCfg = Debug|x86
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|x86.Build.0 = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.GP Debug|x86.ActiveCfg = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.GP Debug|x86.Build.0 = Debug|x86
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -748,6 +858,6 @@
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Visualization Debug|x86.Build.0 = Debug|x86
-		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -755,4 +865,7 @@
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|x86.ActiveCfg = Debug|x86
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|x86.Build.0 = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.GP Debug|x86.ActiveCfg = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.GP Debug|x86.Build.0 = Debug|x86
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -763,6 +876,6 @@
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Visualization Debug|x86.Build.0 = Debug|x86
-		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -770,4 +883,7 @@
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|x86.ActiveCfg = Debug|x86
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|x86.Build.0 = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.GP Debug|x86.ActiveCfg = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.GP Debug|x86.Build.0 = Debug|x86
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -778,6 +894,6 @@
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{23117533-8A91-474E-BBF6-C39485D0810A}.Visualization Debug|x86.Build.0 = Debug|x86
-		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -785,4 +901,8 @@
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|x86.ActiveCfg = Debug|x86
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|x86.Build.0 = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.GP Debug|x86.ActiveCfg = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.GP Debug|x86.Build.0 = Debug|x86
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -792,6 +912,6 @@
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Visualization Debug|x86.Build.0 = Debug|x86
-		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{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
@@ -799,4 +919,8 @@
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|x86.ActiveCfg = Debug|x86
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|x86.Build.0 = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.GP Debug|x86.ActiveCfg = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.GP Debug|x86.Build.0 = Debug|x86
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -806,6 +930,6 @@
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Visualization Debug|x86.Build.0 = Debug|x86
-		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{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
@@ -813,4 +937,8 @@
 		{74223A32-C726-4978-BE78-37113A18373C}.Debug|x86.ActiveCfg = Debug|x86
 		{74223A32-C726-4978-BE78-37113A18373C}.Debug|x86.Build.0 = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.GP Debug|x86.ActiveCfg = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.GP Debug|x86.Build.0 = Debug|x86
 		{74223A32-C726-4978-BE78-37113A18373C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{74223A32-C726-4978-BE78-37113A18373C}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -820,6 +948,6 @@
 		{74223A32-C726-4978-BE78-37113A18373C}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{74223A32-C726-4978-BE78-37113A18373C}.Visualization Debug|x86.Build.0 = Debug|x86
-		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{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
@@ -827,4 +955,8 @@
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|x86.ActiveCfg = Debug|x86
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|x86.Build.0 = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.GP Debug|x86.ActiveCfg = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.GP Debug|x86.Build.0 = Debug|x86
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -834,6 +966,6 @@
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Visualization Debug|x86.Build.0 = Debug|x86
-		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{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
@@ -841,4 +973,8 @@
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|x86.ActiveCfg = Debug|x86
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|x86.Build.0 = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.GP Debug|x86.ActiveCfg = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.GP Debug|x86.Build.0 = Debug|x86
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -848,6 +984,6 @@
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Visualization Debug|x86.Build.0 = Debug|x86
-		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -855,4 +991,8 @@
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x86.ActiveCfg = Debug|x86
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x86.Build.0 = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.GP Debug|x86.ActiveCfg = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.GP Debug|x86.Build.0 = Debug|x86
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -862,6 +1002,6 @@
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Visualization Debug|x86.Build.0 = Debug|x86
-		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -869,4 +1009,8 @@
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x86.ActiveCfg = Debug|x86
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x86.Build.0 = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.GP Debug|x86.ActiveCfg = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.GP Debug|x86.Build.0 = Debug|x86
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -876,6 +1020,6 @@
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Visualization Debug|x86.Build.0 = Debug|x86
-		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -883,4 +1027,8 @@
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|x86.ActiveCfg = Debug|x86
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|x86.Build.0 = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.GP Debug|x86.ActiveCfg = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.GP Debug|x86.Build.0 = Debug|x86
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -890,6 +1038,6 @@
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{679E977A-117B-456E-8594-2A4DEADB658B}.Visualization Debug|x86.Build.0 = Debug|x86
-		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -897,4 +1045,8 @@
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|x86.ActiveCfg = Debug|x86
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|x86.Build.0 = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.GP Debug|x86.ActiveCfg = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.GP Debug|x86.Build.0 = Debug|x86
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -904,6 +1056,6 @@
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Visualization Debug|x86.Build.0 = Debug|x86
-		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -911,4 +1063,8 @@
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x86.ActiveCfg = Debug|x86
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x86.Build.0 = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.GP Debug|x86.ActiveCfg = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.GP Debug|x86.Build.0 = Debug|x86
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -918,6 +1074,6 @@
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Visualization Debug|x86.Build.0 = Debug|x86
-		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -925,4 +1081,8 @@
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x86.ActiveCfg = Debug|x86
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x86.Build.0 = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.GP Debug|x86.ActiveCfg = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.GP Debug|x86.Build.0 = Debug|x86
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -932,11 +1092,13 @@
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{89F4BC52-C174-481E-9BD2-3814171020E8}.Visualization Debug|x86.Build.0 = Debug|x86
-		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x86.ActiveCfg = Debug|x86
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x86.Build.0 = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.GP Debug|x86.ActiveCfg = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.GP Debug|x86.Build.0 = Debug|x86
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -946,6 +1108,6 @@
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Visualization Debug|x86.Build.0 = Debug|x86
-		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -953,4 +1115,8 @@
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|x86.ActiveCfg = Debug|x86
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|x86.Build.0 = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.GP Debug|x86.ActiveCfg = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.GP Debug|x86.Build.0 = Debug|x86
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -960,6 +1126,6 @@
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{A0821479-801F-43DF-B788-AE92FB410DA9}.Visualization Debug|x86.Build.0 = Debug|x86
-		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -967,4 +1133,8 @@
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x86.ActiveCfg = Debug|x86
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x86.Build.0 = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.GP Debug|x86.ActiveCfg = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.GP Debug|x86.Build.0 = Debug|x86
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -974,6 +1144,6 @@
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Visualization Debug|x86.Build.0 = Debug|x86
-		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -981,4 +1151,8 @@
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x86.ActiveCfg = Debug|x86
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x86.Build.0 = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.GP Debug|x86.ActiveCfg = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.GP Debug|x86.Build.0 = Debug|x86
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -988,6 +1162,6 @@
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Visualization Debug|x86.Build.0 = Debug|x86
-		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -995,4 +1169,8 @@
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x86.ActiveCfg = Debug|x86
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x86.Build.0 = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.GP Debug|x86.ActiveCfg = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.GP Debug|x86.Build.0 = Debug|x86
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -1002,6 +1180,6 @@
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Visualization Debug|x86.Build.0 = Debug|x86
-		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|Any CPU.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|Any CPU.Build.0 = Debug|x86
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|x86.ActiveCfg = Debug|x86
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -1009,4 +1187,8 @@
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x86.ActiveCfg = Debug|x86
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x86.Build.0 = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.GP Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.GP Debug|Any CPU.Build.0 = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.GP Debug|x86.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.GP Debug|x86.Build.0 = Debug|x86
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -1016,40 +1198,4 @@
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Visualization Debug|x86.ActiveCfg = Debug|x86
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Visualization Debug|x86.Build.0 = Debug|x86
-		{21187322-52DD-4243-80A4-A85F0263E63B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Any CPU.Build.0 = Release|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|x86.ActiveCfg = Release|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
-		{21187322-52DD-4243-80A4-A85F0263E63B}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Release|Any CPU.Build.0 = Release|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Release|x86.ActiveCfg = Release|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
-		{85FA46C6-761E-4098-9EF7-060ECC386396}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Release|Any CPU.Build.0 = Release|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Release|x86.ActiveCfg = Release|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
-		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: trunk/sources/HeuristicLab/CopyAssemblies.cmd
===================================================================
--- trunk/sources/HeuristicLab/CopyAssemblies.cmd	(revision 1286)
+++ trunk/sources/HeuristicLab/CopyAssemblies.cmd	(revision 1287)
@@ -18,5 +18,4 @@
 copy "%SolutionDir%\HeuristicLab.CEDMA.DB\%Outdir%\SemWeb.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.CEDMA.DB.Interfaces\%Outdir%\HeuristicLab.CEDMA.DB.Interfaces-3.2.dll" .\plugins
-copy "%SolutionDir%\HeuristicLab.CEDMA.Operators\%Outdir%\HeuristicLab.CEDMA.Operators-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.CEDMA.Server\%Outdir%\HeuristicLab.CEDMA.Server-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.Charting\%Outdir%\HeuristicLab.Charting-3.2.dll" .\plugins
