Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/DAL.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/DAL.cs	(revision 9062)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/DAL.cs	(revision 9166)
@@ -27,4 +27,13 @@
     IBlobDao CreateBlobDao();
   }
+
+  public static class DataAccessLayerProvider {    
+    private static IDataAccessLayer layer = new Azure.AzureDataAccessLayer();
+    //private static IDataAccessLayer layer = new Mockup.MockupDataAccessLayer();
+
+    public static IDataAccessLayer GetLayer() { 
+      return layer; 
+    }
+  }
 }
 
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/IControllerService.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/IControllerService.cs	(revision 9062)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/IControllerService.cs	(revision 9166)
@@ -20,5 +20,5 @@
 
     [OperationContract]
-    void ScheduleOptimizationScenario(User user, OptimizationScenario scenario);
+    void ScheduleOptimizationScenario(User user, OptimizationScenario scenario, JobExecutionDetails details);
 
     [OperationContract]
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/IScenarioManager.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/IScenarioManager.cs	(revision 9062)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/IScenarioManager.cs	(revision 9166)
@@ -7,5 +7,5 @@
 namespace HeuristicLab.Services.Optimization.ControllerService.Interfaces {
   public interface IScenarioManager {
-    void DispatchScenario(User user, OptimizationScenario scenario);
+    void DispatchScenario(User user, OptimizationScenario scenario, JobExecutionDetails details);
     IList<Job> GetJobs(User user);
     Job GetJob(User user, string id);
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/Model/ControllerModel.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/Model/ControllerModel.cs	(revision 9062)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/Model/ControllerModel.cs	(revision 9166)
@@ -45,4 +45,40 @@
     public string[] RowNames { get; set; }
 
+    public void CopyRow(int index) {
+      var newData = new double[Value.Length + 1][];
+      var copyRow = new double[Value[index].Length];
+      for (var i = 0; i < copyRow.Length; i++) {
+        copyRow[i] = Value[index][i];
+      }
+      for (var i = 0; i < newData.Length; i++) {
+        if (i < index) {
+          newData[i] = Value[i];
+        }
+        else if (i == index) {
+          newData[i] = copyRow;
+        }
+        else if (i > index) {
+          newData[i] = Value[i - 1];
+        }
+      }
+      Value = newData;
+    }
+
+    public void DeleteRow(int index) {
+      if (Value.Length == 1)
+        return;
+
+      var newData = new double[Value.Length - 1][];
+      for (var i = 0; i < Value.Length; i++) {
+        if (i < index) {
+          newData[i] = Value[i];
+        }
+        else if (i > index) {
+          newData[i - 1] = Value[i];
+        }
+      }
+      Value = newData;
+    }
+
     public override bool TrySetFromString(string input) {
       var splitted = input.Split(':');
@@ -61,5 +97,5 @@
         return false;
       // very, very buggy
-      if (i >= Value.Length || j >= Value[0].Length ) {
+      /*if (i >= Value.Length || j >= Value[0].Length ) {
         double[][] valueArr = new double[i >= Value.GetLength(0) ? i : Value.GetLength(0)][];        
         for (int k = 0; k < Value.Length; k++) {
@@ -70,5 +106,5 @@
         }
         Value = valueArr;
-      }
+      }*/
 
       Value[i][j] = value;
@@ -186,5 +222,5 @@
 
   [DataContract]
-  public class InputParameters {
+  public class ProblemParameters {
     private IList<Parameter> items = new List<Parameter>();
 
@@ -226,76 +262,108 @@
 
   [DataContract]
+  public class Problem {
+    public Problem() { Parameters = new ProblemParameters(); }
+
+    [DataMember]
+    public ProblemParameters Parameters { get; set; }
+
+    [DataMember]
+    public string Class { get; set; }
+  }
+
+  [DataContract]
+  public class Algorithm {
+    public Algorithm() { Parameters = new AlgorithmParameters(); }
+
+    [DataMember]
+    public AlgorithmParameters Parameters { get; set; }
+
+    [DataMember]
+    public Problem Problem{ get; set; }
+
+    [DataMember]
+    public IList<Algorithm> ChildAlgorithms { get; set; }
+
+    [DataMember]
+    public string Class { get; set; }
+
+    [DataMember]
+    public string Mapper { get; set; }
+  }
+
+  [DataContract]
   public class OptimizationScenario {
     [DataMember]
+    public string Id { get; set; }
+   
+    [DataMember]
+    public IList<Algorithm> Algorithm { get; set; }
+
+    public Algorithm FirstAlgorithm { get { return Algorithm.FirstOrDefault(); } }  
+  }
+
+  [DataContract]
+  public class Experiment {
+    [DataMember]
+    public IList<OptimizationScenario> Scenarios { get; set; }
+
+    public Experiment() {
+      Scenarios = new List<OptimizationScenario>();
+    }
+  }
+
+  [DataContract]
+  public enum JobState {
+    [EnumMember]
+    Waiting,
+    [EnumMember]
+    Calculating,
+    [EnumMember]
+    Aborted,
+    [EnumMember]
+    Failed,
+    [EnumMember]
+    Finished
+  }
+
+  [DataContract]
+  public class JobExecutionDetails {
+    [DataMember]
+    public int Repititions { get; set; }
+
+    [DataMember]
+    public string JobTitle { get; set; }
+
+    [DataMember]
+    public string Group { get; set; }
+  }
+
+  [DataContract]
+  public class Job {
+    [DataMember]
+    public string Id { get; set; }
+
+    [DataMember]
+    public JobState State { get; set; }
+
+    [DataMember]
     public string Name { get; set; }
 
     [DataMember]
-    public string ProblemType { get; set; }
-
-    [DataMember]
-    public string AlgorithmType { get; set; }
-
-    [DataMember]
-    public string MapperType { get; set; }
-
-    private InputParameters inputParams = new InputParameters();
-
-    [DataMember]
-    public InputParameters InputParameters {
-      get { return inputParams; }
-      set { inputParams = value; }
-    }
-
-
-    private AlgorithmParameters algorithmParameters = new AlgorithmParameters();
-
-    [DataMember]
-    public AlgorithmParameters AlgorithmParameters {
-      get { return algorithmParameters; }
-      set { algorithmParameters = value; }
-    }
-  }
-
-  [DataContract]
-  public enum JobState {
-    [EnumMember]
-    Waiting,
-    [EnumMember]
-    Calculating,
-    [EnumMember]
-    Aborted,
-    [EnumMember]
-    Failed,
-    [EnumMember]
-    Finished
-  }
-
-  [DataContract]
-  public class Job {
+    public string Resource { get; set; }
+
+    [DataMember]
+    public DateTime DateCreated { get; set; }
+  }
+
+  [DataContract]
+  public class Run {
     [DataMember]
     public string Id { get; set; }
 
     [DataMember]
-    public JobState State { get; set; }
-
-    [DataMember]
     public string Name { get; set; }
 
     [DataMember]
-    public string Resource { get; set; }
-
-    [DataMember]
-    public DateTime DateCreated { get; set; }
-  }
-
-  [DataContract]
-  public class Run {
-    [DataMember]
-    public string Id { get; set; }
-
-    [DataMember]
-    public string Name { get; set; }
-
-    [DataMember]
     public IList<Parameter> Results { get; set; }
   }
