Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/EditableDataset.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/EditableDataset.cs	(revision 10146)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/EditableDataset.cs	(revision 10146)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.DataPreprocessing {
+  [Item("EditableDataset", "Represents a editable dataset containing data that should be analyzed.")]
+  [StorableClass]
+  public class EditableDataset : Dataset {
+    [StorableConstructor]
+    private EditableDataset(bool deserializing) : base(deserializing) { }
+    private EditableDataset(Dataset original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) { return new EditableDataset(this, cloner); }
+
+    public EditableDataset()
+      : base() {
+    }
+
+    public EditableDataset(IEnumerable<string> variableNames, IEnumerable<IList> variableValues)
+      : base(variableNames, variableValues) {
+    }
+
+    public EditableDataset(IEnumerable<string> variableNames, double[,] variableValues)
+      : base(variableNames, variableValues) {
+    }
+
+    #region IStringConvertibleMatrix Members
+
+    public override bool ReadOnly {
+      get { return true; }
+    }
+
+    public override bool SetValue(string value, int rowIndex, int columnIndex) {
+      var values = variableValues[variableNames[columnIndex]];
+      object insertValue = null;
+      if (values is List<double>)
+        insertValue = Double.Parse(value);
+      else if (values is List<string>)
+        insertValue = value;
+      else if (values is List<DateTime>)
+        insertValue = DateTime.Parse(value);
+      else
+        throw new ArgumentException("The variable values must be of type double, string or DateTime");
+
+      variableValues[variableNames[columnIndex]][rowIndex] = insertValue;
+      return true;
+    }
+
+    #endregion
+  }
+}
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10145)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10146)
@@ -84,4 +84,5 @@
       <DependentUpon>DataPreprocessingView.cs</DependentUpon>
     </Compile>
+    <Compile Include="EditableDataset.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: /branches/DataPreprocessing/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 10145)
+++ /branches/DataPreprocessing/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 10146)
@@ -35,6 +35,6 @@
   public class Dataset : NamedItem, IDataset {
     [StorableConstructor]
-    private Dataset(bool deserializing) : base(deserializing) { }
-    private Dataset(Dataset original, Cloner cloner)
+    protected Dataset(bool deserializing) : base(deserializing) { }
+    protected Dataset(Dataset original, Cloner cloner)
       : base(original, cloner) {
       variableValues = new Dictionary<string, IList>(original.variableValues);
@@ -143,7 +143,7 @@
 
     [Storable(Name = "VariableValues")]
-    private Dictionary<string, IList> variableValues;
-
-    private List<string> variableNames;
+    protected Dictionary<string, IList> variableValues;
+
+    protected List<string> variableNames;
     [Storable]
     public IEnumerable<string> VariableNames {
@@ -212,5 +212,5 @@
       set { throw new NotSupportedException(); }
     }
-    public bool ReadOnly {
+    public virtual bool ReadOnly {
       get { return false; }
     }
@@ -228,18 +228,6 @@
       return variableValues[variableNames[columnIndex]][rowIndex].ToString();
     }
-    public bool SetValue(string value, int rowIndex, int columnIndex) {
-      var values = variableValues[variableNames[columnIndex]];
-      object insertValue = null;
-      if (values is List<double>)
-        insertValue = Double.Parse(value); /// TODO: set culture
-      else if (values is List<string>)
-        insertValue = value;
-      else if (values is List<DateTime>)
-        insertValue = DateTime.Parse(value);
-      else
-        throw new ArgumentException("The variable values must be of type double, string or DateTime");
-
-      variableValues[variableNames[columnIndex]][rowIndex] = insertValue;
-      return true;
+    public virtual bool SetValue(string value, int rowIndex, int columnIndex) {
+      throw new NotSupportedException();
     }
     public bool Validate(string value, out string errorMessage) {
