Index: /stable/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
===================================================================
--- /stable/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 15158)
+++ /stable/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 15159)
@@ -74,5 +74,4 @@
         throw new ArgumentException(message);
       }
-      DatasetUtil.ValidateInputData(variableValues); // the validation call checks if every values IList is actually a list of the supported type
       rows = variableValues.First().Count;
       this.variableNames = new List<string>(variableNames);
@@ -115,9 +114,9 @@
       foreach (var v in variableNames) {
         if (VariableHasType<double>(v)) {
-          values.Add(new List<double>((List<double>)variableValues[v]));
+          values.Add(new List<double>((IList<double>)variableValues[v]));
         } else if (VariableHasType<string>(v)) {
-          values.Add(new List<string>((List<string>)variableValues[v]));
+          values.Add(new List<string>((IList<string>)variableValues[v]));
         } else if (VariableHasType<DateTime>(v)) {
-          values.Add(new List<DateTime>((List<DateTime>)variableValues[v]));
+          values.Add(new List<DateTime>((IList<DateTime>)variableValues[v]));
         } else {
           throw new ArgumentException("Unknown variable type.");
@@ -175,9 +174,9 @@
     }
     public IEnumerable<string> DoubleVariables {
-      get { return variableValues.Where(p => p.Value is List<double>).Select(p => p.Key); }
+      get { return variableValues.Where(p => p.Value is IList<double>).Select(p => p.Key); }
     }
 
     public IEnumerable<string> StringVariables {
-      get { return variableValues.Where(p => p.Value is List<string>).Select(p => p.Key); }
+      get { return variableValues.Where(p => p.Value is IList<string>).Select(p => p.Key); }
     }
 
@@ -194,5 +193,5 @@
     public ReadOnlyCollection<double> GetReadOnlyDoubleValues(string variableName) {
       var values = GetValues<double>(variableName);
-      return values.AsReadOnly();
+      return new ReadOnlyCollection<double>(values);
     }
     public double GetDoubleValue(string variableName, int row) {
@@ -214,5 +213,5 @@
     public ReadOnlyCollection<string> GetReadOnlyStringValues(string variableName) {
       var values = GetValues<string>(variableName);
-      return values.AsReadOnly();
+      return new ReadOnlyCollection<string>(values);
     }
 
@@ -221,9 +220,9 @@
       return rows.Select(x => values[x]);
     }
-    private List<T> GetValues<T>(string variableName) {
+    private IList<T> GetValues<T>(string variableName) {
       IList list;
       if (!variableValues.TryGetValue(variableName, out list))
         throw new ArgumentException("The variable " + variableName + " does not exist in the dataset.");
-      List<T> values = list as List<T>;
+      IList<T> values = list as IList<T>;
       if (values == null) throw new ArgumentException("The variable " + variableName + " is not a " + typeof(T) + " variable.");
       return values;
Index: /stable/HeuristicLab.Problems.DataAnalysis/3.4/DatasetUtil.cs
===================================================================
--- /stable/HeuristicLab.Problems.DataAnalysis/3.4/DatasetUtil.cs	(revision 15158)
+++ /stable/HeuristicLab.Problems.DataAnalysis/3.4/DatasetUtil.cs	(revision 15159)
@@ -38,6 +38,4 @@
     /// <returns>A new list containing shuffled copies of the original value lists.</returns>
     public static List<IList> ShuffleLists(this List<IList> values, IRandom random) {
-      ValidateInputData(values);
-
       int count = values.First().Count;
       int[] indices = Enumerable.Range(0, count).Shuffle(random).ToArray();
@@ -45,9 +43,9 @@
       for (int col = 0; col < values.Count; col++) {
 
-        if (values[col] is List<double>)
+        if (values[col] is IList<double>)
           shuffled.Add(new List<double>());
-        else if (values[col] is List<DateTime>)
+        else if (values[col] is IList<DateTime>)
           shuffled.Add(new List<DateTime>());
-        else if (values[col] is List<string>)
+        else if (values[col] is IList<string>)
           shuffled.Add(new List<string>());
         else
@@ -59,38 +57,5 @@
       }
       return shuffled;
-    }
 
-    /// <summary>
-    /// This method checks if the provided lists of values are actually of the type List<T>, where T is a double, string or DateTime
-    /// </summary>
-    /// <param name="values">The values lists</param>
-    internal static void ValidateInputData(IEnumerable<IList> values) {
-      if (!values.Any())
-        throw new InvalidEnumArgumentException("The provided list of values is empty.");
-
-      var errorIndices = new List<int>();
-      int col = 0;
-      foreach (var v in values) {
-        var doubleList = v as List<double>;
-        var stringList = v as List<string>;
-        var dateTimeList = v as List<DateTime>;
-
-        var typedCollections = new IList[] { doubleList, stringList, dateTimeList };
-
-        if (typedCollections.All(x => x == null)) {
-          errorIndices.Add(col); // the values are not a) a list and b) of any of the supported types
-        }
-        ++col;
-      }
-
-      if (errorIndices.Any()) {
-        var sb = new StringBuilder();
-        for (int i = 0; i < errorIndices.Count; ++i) {
-          sb.Append(i);
-          sb.Append(i < errorIndices.Count - 1 ? ", " : " ");
-        }
-        var error = string.Format("Invalid input values. The following columns are not lists of double, string or DateTime values: {0}", sb);
-        throw new ArgumentException(error);
-      }
     }
   }
