Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs	(revision 2198)
@@ -65,11 +65,7 @@
     public DispatcherBase(IModelingDatabase database, Problem problem) {
       this.problem = problem;
-      this.database = database;
-      allowedTargetVariables = new List<int>();
-      activeInputVariables = new Dictionary<int, List<int>>();
-    }
-
-    public HeuristicLab.Modeling.IAlgorithm GetNextJob() {
-      if (problem == null) {
+      problem.Changed += (sender, args) => {
+        allowedTargetVariables = new List<int>(problem.AllowedTargetVariables);
+        activeInputVariables = new Dictionary<int, List<int>>();
         foreach (int targetVar in problem.AllowedTargetVariables) {
           activeInputVariables.Add(targetVar, new List<int>());
@@ -77,5 +73,9 @@
         }
         OnChanged();
-      }
+      };
+      this.database = database;
+    }
+
+    public HeuristicLab.Modeling.IAlgorithm GetNextJob() {
       if (allowedTargetVariables.Count > 0) {
         int[] targetVariables, inputVariables;
Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/Problem.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/Problem.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/Problem.cs	(revision 2198)
@@ -39,8 +39,14 @@
   /// </summary>
   public class Problem {
+    internal event EventHandler Changed;
+
     private HeuristicLab.DataAnalysis.Dataset dataset;
     public HeuristicLab.DataAnalysis.Dataset Dataset {
       get { return dataset; }
-      set { dataset = value; }
+      set {
+        if (value != dataset) {
+          dataset = value;
+        }
+      }
     }
 
@@ -129,4 +135,8 @@
       return new ProblemView(this);
     }
+
+    internal void FireChanged() {
+      if (Changed != null) Changed(this, new EventArgs());
+    }
   }
 }
Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.Designer.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.Designer.cs	(revision 2198)
@@ -19,4 +19,6 @@
  */
 #endregion
+using HeuristicLab.Core;
+using System.Windows.Forms;
 namespace HeuristicLab.CEDMA.Server {
   partial class ProblemView {
@@ -54,9 +56,5 @@
       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();
@@ -70,7 +68,5 @@
       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.datasetView1 = new HeuristicLab.DataAnalysis.DatasetView();
       this.partitioningGroupBox.SuspendLayout();
       this.learningTaskGroupBox.SuspendLayout();
@@ -167,28 +163,4 @@
       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
@@ -203,26 +175,4 @@
       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
@@ -238,5 +188,5 @@
       this.partitioningGroupBox.Controls.Add(this.testSamplesStartTextBox);
       this.partitioningGroupBox.Controls.Add(this.testLabel);
-      this.partitioningGroupBox.Location = new System.Drawing.Point(29, 409);
+      this.partitioningGroupBox.Location = new System.Drawing.Point(3, 452);
       this.partitioningGroupBox.Name = "partitioningGroupBox";
       this.partitioningGroupBox.Size = new System.Drawing.Size(326, 100);
@@ -319,5 +269,5 @@
       this.learningTaskGroupBox.Controls.Add(this.timeSeriesRadioButton);
       this.learningTaskGroupBox.Controls.Add(this.autoregressiveCheckBox);
-      this.learningTaskGroupBox.Location = new System.Drawing.Point(29, 621);
+      this.learningTaskGroupBox.Location = new System.Drawing.Point(335, 452);
       this.learningTaskGroupBox.Name = "learningTaskGroupBox";
       this.learningTaskGroupBox.Size = new System.Drawing.Size(326, 163);
@@ -356,16 +306,10 @@
       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;
+      // datasetView1
+      // 
+      this.datasetView1.Location = new System.Drawing.Point(3, 32);
+      this.datasetView1.Name = "datasetView1";
+      this.datasetView1.Size = new System.Drawing.Size(770, 414);
+      this.datasetView1.TabIndex = 36;
       // 
       // ProblemView
@@ -373,14 +317,10 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.datasetView1);
       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.Size = new System.Drawing.Size(776, 615);
       this.partitioningGroupBox.ResumeLayout(false);
       this.partitioningGroupBox.PerformLayout();
@@ -403,10 +343,5 @@
     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;
@@ -420,4 +355,5 @@
     private System.Windows.Forms.TextBox maxTimeOffsetTextBox;
     private System.Windows.Forms.Label autoregressiveLabel;
+    private HeuristicLab.DataAnalysis.DatasetView datasetView1;
   }
 }
Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.cs	(revision 2198)
@@ -39,4 +39,5 @@
     public ProblemView(Problem problem) {
       this.problem = problem;
+      problem.Changed += (sender, args) => UpdateControls();
       InitializeComponent();
       UpdateControls();
@@ -45,5 +46,4 @@
     protected override void UpdateControls() {
       base.UpdateControls();
-      datasetView.Dataset = problem.Dataset;
       trainingSamplesStartTextBox.Text = problem.TrainingSamplesStart.ToString();
       trainingSamplesEndTextBox.Text = problem.TrainingSamplesEnd.ToString();
@@ -60,10 +60,4 @@
         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));
-      }
     }
 
@@ -99,5 +93,5 @@
           dataset.Samples = new double[dataset.Rows * dataset.Columns];
           Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
-          datasetView.Dataset = problem.Dataset;
+          datasetView1.Dataset = problem.Dataset;
 
           problem.TrainingSamplesStart = parser.TrainingSamplesStart;
@@ -109,5 +103,5 @@
           problem.TestSamplesEnd = parser.TestSamplesEnd;
           problem.AllowedTargetVariables.Add(parser.TargetVariable);
-
+          problem.FireChanged();
           List<int> nonInputVariables = parser.NonInputVariables;
           for (int i = 0; i < dataset.Columns; i++) {
@@ -119,17 +113,17 @@
     }
 
-    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 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) {
Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ServerApplication.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ServerApplication.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.CEDMA.Server/3.3/ServerApplication.cs	(revision 2198)
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.CEDMA.Server {
-  [ClassInfo(Name = "CEDMA Server", Description = "Server to execute CEDMA agents.", AutoRestart=true)]
+  [ClassInfo(Name = "CEDMA", Description = "Cooperative Evolutionary Data Mining.", AutoRestart=true)]
   class ServerApplication : ApplicationBase {
     public override void Run() {
@@ -35,5 +35,5 @@
       serverControl.Dock = DockStyle.Fill;
       mainForm.Controls.Add(serverControl);
-      mainForm.Name = "CEDMA Server";
+      mainForm.Name = "CEDMA";
       Application.Run(mainForm);
     }
Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.DataAnalysis/3.2/DatasetView.cs	(revision 2198)
@@ -37,15 +37,4 @@
       : base() {
       InitializeComponent();
-      DiscoveryService discovery = new DiscoveryService();
-      IDatasetManipulator[] manipuators = discovery.GetInstances<IDatasetManipulator>();
-      contextMenuStrip.Items.Add(new ToolStripSeparator());
-      foreach(IDatasetManipulator manipulator in manipuators) {
-        contextMenuStrip.Items.Add(new ToolStripButton(manipulator.Action,null , delegate(object source, EventArgs args) 
-          { 
-            manipulator.Execute(Dataset);
-            Refresh();
-          }));
-      }
-      
       // format all cells with the round-trip formatter to make sure that values that are exported and imported to
       // another C# app (HL2) have the same numeric value
@@ -60,4 +49,13 @@
       : this() {
       this.Dataset = dataset;
+      DiscoveryService discovery = new DiscoveryService();
+      IDatasetManipulator[] manipuators = discovery.GetInstances<IDatasetManipulator>();
+      contextMenuStrip.Items.Add(new ToolStripSeparator());
+      foreach (IDatasetManipulator manipulator in manipuators) {
+        contextMenuStrip.Items.Add(new ToolStripButton(manipulator.Action, null, delegate(object source, EventArgs args) {
+          manipulator.Execute(Dataset);
+          Refresh();
+        }));
+      }      
     }
 
Index: /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.Modeling.Database.SQLServerCompact/3.2/DataObjects/Problem.cs
===================================================================
--- /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.Modeling.Database.SQLServerCompact/3.2/DataObjects/Problem.cs	(revision 2197)
+++ /branches/HeuristicLab.Modeling Database Backend/sources/HeuristicLab.Modeling.Database.SQLServerCompact/3.2/DataObjects/Problem.cs	(revision 2198)
@@ -6,8 +6,9 @@
 
 using HeuristicLab.DataAnalysis;
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Modeling.Database.SQLServerCompact {
   [Table(Name = "Problem")]
-  public class Problem {
+  public class Problem : IProblem {
     public Problem() {
     }
@@ -15,5 +16,5 @@
     public Problem(Dataset dataset)
       : this() {
-      this.dataset = dataset;
+      this.Dataset = dataset;
     }
 
@@ -25,9 +26,14 @@
     }
 
-    private Dataset dataset;
-    [Column(Storage = "dataset", DbType = "image", CanBeNull = false)]
+    private byte[] data;
+    [Column(Storage = "data", DbType = "image", CanBeNull = false)]
+    public byte[] Data {
+      get { return this.data; }
+      private set { this.data = value; }
+    }
+
     public Dataset Dataset {
-      get { return this.dataset; }
-      private set { this.dataset = value; }
+      get { return (Dataset)PersistenceManager.RestoreFromGZip(this.Data); }
+      set { this.Data = PersistenceManager.SaveToGZip(value); }
     }
   }
