Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/MatlabConnector.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/MatlabConnector.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/MatlabConnector.cs	(revision 15919)
@@ -112,5 +112,5 @@
           matLabApi.GetWorkspaceData(varName, workspace, out value);
         }
-      } catch (COMException e) {
+      } catch (COMException) {
         throw new ArgumentException(string.Format("The variable {0} does not exist in the current workspace {1}.", varName, workspace));
       }
@@ -137,5 +137,5 @@
           matLabApi.Execute("exit");
         }
-      } catch (COMException e) {
+      } catch (COMException) {
       } finally {
         matLabApi = null;
Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLTimeseries.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLTimeseries.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLTimeseries.cs	(revision 15919)
@@ -6,5 +6,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis.Regression.Matlab.Api.Types {
-    public interface IMLTimeseries {
+    public interface IMLTimeseries : IMLVariable {
         /// <summary>
         /// Data headers of the timeseries.
Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLValueVariable.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLValueVariable.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLValueVariable.cs	(revision 15919)
@@ -6,10 +6,9 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis.Regression.Matlab.Api.Types {
-    public interface IMLValueVariable<TData> : IMLVariable<TData> {
-        /// <summary>
-        /// Converts a Matlab variable into a timeseries.
-        /// </summary>
-        /// <returns></returns>
-        IMLTimeseries ToTimeseries();
-    }
+  public interface IMLValueVariable<TData> : IMLVariable {   
+    /// <summary>
+    /// The data of the Matlab variable.
+    /// </summary>
+    TData Data { get; set; }
+  }
 }
Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLVariable.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLVariable.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/IMLVariable.cs	(revision 15919)
@@ -6,19 +6,14 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis.Regression.Matlab.Api.Types {
-    public interface IMLVariable<TData> {
-        /// <summary>
-        /// The name of the Matlab variable.
-        /// </summary>
-        string Name { get; set; }
+  public interface IMLVariable {
+    /// <summary>
+    /// The name of the Matlab variable.
+    /// </summary>
+    string Name { get; set; }
 
-        /// <summary>
-        /// The data of the Matlab variable.
-        /// </summary>
-        TData Data { get; set; }
-
-        /// <summary>
-        /// The Matlab datatype.
-        /// </summary>
-        MLDatatype Datatype { get; }
-    }
+    /// <summary>
+    /// The Matlab datatype.
+    /// </summary>
+    MLDatatype Datatype { get; }
+  }
 }
Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLDouble.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLDouble.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLDouble.cs	(revision 15919)
@@ -22,9 +22,5 @@
     public MLDatatype Datatype {
       get { return MLDatatype.Double; }
-    }
-
-    public IMLTimeseries ToTimeseries() {
-      return new MLTimeseries(Name, new double[,] { { 0 } }, new double[,] { { Data } });
-    }
+    }    
   }
 }
Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLDoubleArray.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLDoubleArray.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLDoubleArray.cs	(revision 15919)
@@ -7,4 +7,7 @@
 namespace HeuristicLab.Problems.Instances.DataAnalysis.Regression.Matlab.Api.Types {
   public class MLDoubleArray : IMLValueVariable<double[,]> {
+    private string[] _dataHeaders;
+
+    #region Constructors
 
     public MLDoubleArray(string name, object values) {
@@ -14,7 +17,65 @@
       }
       Data = values as double[,];
+
+      _dataHeaders = new string[Data.GetLength(1)];
+      for (int i = 0; i < _dataHeaders.Length; i++) {
+        _dataHeaders[i] = string.Format("{0}:{1}", name, i);
+      }
     }
 
+    private MLDoubleArray(MLDoubleArray a1, MLDoubleArray a2) {
+      Name = string.Format("{0};{1}", a1.Name, a2.Name);
+
+      if (!ConcatFeasible(a1, a2)) {
+        throw new ArgumentException(string.Format("Cannot concat {0} and {1}. Different number of rows.", a1.Name, a2.Name));
+      }
+
+      var numberOfColumns = a1.Columns + a2.Columns;
+      _dataHeaders = new string[numberOfColumns];
+      for (int i = 0; i < numberOfColumns; i++) {
+        if (i < a1.Columns) {
+          _dataHeaders[i] = a1.DataHeader[i];
+        } else {
+          _dataHeaders[i] = a2.DataHeader[i - a1.Columns];
+        }
+      }
+
+      Data = new double[a1.Rows, numberOfColumns];
+      for (int i = 0; i < a1.Rows; i++) {
+        for (int j = 0; j < numberOfColumns; j++) {
+          if (j < a1.Columns) {
+            Data[i, j] = a1.Data[i, j];
+          } else {
+            Data[i, j] = a1.Data[i, j - a1.Columns];
+          }
+        }
+      }
+    }
+    #endregion
+
+
+    /// <summary>
+    /// Concats two given MLDoubleArrays if their number of rows equals.
+    /// If they can't be concated, this method returns null.
+    /// </summary>
+    /// <param name="a1"></param>
+    /// <param name="a2"></param>
+    /// <returns></returns>
+    public static MLDoubleArray Concat(MLDoubleArray a1, MLDoubleArray a2) {
+      if (ConcatFeasible(a1, a2)) {
+        return null;
+      }
+      return new MLDoubleArray(a1, a2);
+    }
+
+    public static bool ConcatFeasible(MLDoubleArray a1, MLDoubleArray a2) {
+      return a1.Rows == a2.Rows;
+    }
+
+
+    #region Properties from the interface
+
     public string Name { get; set; }
+
     public double[,] Data { get; set; }
 
@@ -23,11 +84,18 @@
     }
 
-    public IMLTimeseries ToTimeseries() {
-      var times = new double[Data.GetLength(0), 1];
-      for (int i = 0; i < times.GetLength(0); i++) {
-        times[i, 1] = i;
+    public string[] DataHeader {
+      get { return _dataHeaders; }
+    }
+    #endregion
+
+    public int Rows { get {
+        return Data.GetLength(0);
       }
+    }
 
-      return new MLTimeseries(Name, times, Data);
+    public int Columns {
+      get {
+        return Data.GetLength(1);
+      }
     }
   }
Index: branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLTimeseries.cs
===================================================================
--- branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLTimeseries.cs	(revision 15912)
+++ branches/2913_MatlabScriptProblemInstanceProvider/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Matlab/Api/Types/MLTimeseries.cs	(revision 15919)
@@ -11,4 +11,6 @@
 
     private string[] _dataHeaders;
+
+    #region Constructors
 
     protected MLTimeseries() {
@@ -35,12 +37,29 @@
         }
       }
+      
 
+      IList<MLTimeseries> tsCollection;
+      if (!(timeseries is IList<MLTimeseries>)) {
+        tsCollection = timeseries.ToList();
+      } else {
+        tsCollection = timeseries as IList<MLTimeseries>;
+      }
+
+      int[] indices = new int[tsCollection.Count];
       var numberOfElements = dataHeaders.Count;
-      Parallel.ForEach(times, (time) => {
-        //foreach (var time in times) {
+      foreach (var time in times) {
         var values = new double[numberOfElements];
         int idx = 0;
-        foreach (var item in timeseries) {
-          double[] vs = item.GetValuesByTime(time);
+        for (int i = 0; i < tsCollection.Count; i++) {
+          var item = tsCollection[i];
+          double[] vs;
+          if (indices[i] == 0 && item.Data[indices[i]].Key > time) {
+            vs = new double[item.Data[0].Value.Length];
+          } else {
+            if (indices[i] < item.Count - 1 && item.Data[indices[i] + 1].Key == time) {
+              indices[i]++;
+            }
+            vs = item.Data[indices[i]].Value;
+          }          
 
           foreach (var v in vs) {
@@ -48,9 +67,9 @@
           }
         }
+
         lock (_locker) {
           Data.Add(new KeyValuePair<double, double[]>(time, values));
         }
-      });
-
+      }
       _dataHeaders = dataHeaders.ToArray();
     }
@@ -96,4 +115,5 @@
       }
     }
+    #endregion
 
     public string Name { get; set; }
