Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/HL/HiveScenarioManager.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/HL/HiveScenarioManager.cs	(revision 9324)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/HL/HiveScenarioManager.cs	(revision 9350)
@@ -21,8 +21,8 @@
 using System.Data;
 using HeuristicLab.Services.Optimization.ControllerService.General;
+using HeuristicLab.Services.Optimization.ControllerService.Parameters.HL;
 
 namespace HeuristicLab.Services.Optimization.ControllerService {
-  public class ScenarioEntity : TableServiceEntity {
-
+  public class ScenarioEntity : TableServiceEntity {    
     public ScenarioEntity() {
     }
@@ -41,4 +41,5 @@
 
   public class HiveScenarioManager : IScenarioManager {
+    private static HLParameterMapper parameterMapper = new HLParameterMapper();
     private static IScenarioMapper tspMapper;
     private static object lockable;
@@ -297,7 +298,16 @@
               var value = run.Results[key];              
               Parameter result = MapHiveDataType(key, value);
-              resultValues.Add(result);
+              resultValues.Add(result);              
             }
             taskRun.Results = resultValues;
+            IList<Parameter> inputParameters = new List<Model.Parameter>();
+            foreach (var key in run.Parameters.Keys) {
+              var value = run.Parameters[key];
+              Parameter param = MapHiveDataType(key, value);
+              inputParameters.Add(param);
+            }
+            // crawl the copied experiment of the job
+            //taskRun.Experiment = dal.JobDao.FindByJobId(id);
+            taskRun.InputParameters = inputParameters;
             runs.Add(taskRun);
           }
@@ -310,5 +320,10 @@
     
     private Parameter MapHiveDataType(string name, IItem item) {
-      Parameter result = new Parameter();
+
+      if (parameterMapper.IsHandlerAvailable(item)) {
+        return parameterMapper.Map(name, item);
+      }
+
+      var result = new Parameter();
       result.Type = ParameterType.String;
       //TODO: How shall we handle dll specific datatypes?      
@@ -349,5 +364,6 @@
             matrixValue[i][j] = matrix[j, i];
           }
-        }        
+        }
+        matrixValue = transpose(matrixValue);
         result.Value = new HeuristicLab.Services.Optimization.ControllerService.Model.DecimalMatrix() { Name = name, Value = matrixValue, RowNames = (matrix.ColumnNames.Count() > 0 ? matrix.ColumnNames.ToArray() : null) };
       }
@@ -408,5 +424,5 @@
       }
       else {
-        result.Value = new HeuristicLab.Services.Optimization.ControllerService.Model.StringValue() { Name = name, Value = "Cannot be displayed as string" };
+        result.Value = new HeuristicLab.Services.Optimization.ControllerService.Model.StringValue() { Name = name, Value = item.ItemName != null ? item.ItemName + " (Cannot be displayed properly as string)" : "Cannot be displayed properly as string" };
       }
       // TODO: Add workaround for TSP
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/HeuristicLab.Services.Optimization.ControllerService.csproj
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/HeuristicLab.Services.Optimization.ControllerService.csproj	(revision 9324)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/HeuristicLab.Services.Optimization.ControllerService.csproj	(revision 9350)
@@ -179,4 +179,8 @@
     <Compile Include="Mockup\MockupDAL.cs" />
     <Compile Include="Mockup\MockupScenarioManager.cs" />
+    <Compile Include="Parameters\HL\HLParameterHandler.cs" />
+    <Compile Include="Parameters\HL\PathTSPParameterHandler.cs" />
+    <Compile Include="Parameters\HL\PermutationTypeHandler.cs" />
+    <Compile Include="Parameters\ParameterHandler.cs" />
     <Compile Include="Parsers\AlgorithmConverter.cs" />
     <Compile Include="PlaceholderControllerService.cs" />
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/DAL.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/DAL.cs	(revision 9324)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/DAL.cs	(revision 9350)
@@ -39,5 +39,5 @@
     IScenarioDao ScenarioDao { get; }
     IBlobDao BlobDao { get; }
-    IExperimentDao ExperimentDao { get; }    
+    IExperimentDao ExperimentDao { get; }
   }
 
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/Model/ControllerModel.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/Model/ControllerModel.cs	(revision 9324)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Interfaces/Model/ControllerModel.cs	(revision 9350)
@@ -480,4 +480,7 @@
     [DataMember]
     public IList<Parameter> Results { get; set; }
+
+    [DataMember]
+    public IList<Parameter> InputParameters { get; set; }
   }
 
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Mockup/MockupDAL.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Mockup/MockupDAL.cs	(revision 9324)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Mockup/MockupDAL.cs	(revision 9350)
@@ -253,5 +253,4 @@
       }      
     }
-
   }
 }
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/HLParameterHandler.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/HLParameterHandler.cs	(revision 9350)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/HLParameterHandler.cs	(revision 9350)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Services.Optimization.ControllerService.Parameters.HL {
+  public class HLParameterMapper : ParameterMapper<IItem> {
+    public HLParameterMapper() {
+      // register your hl specific datatype handlers here
+      Register(new PathTSPParameterHandler());
+      Register(new PermutationTypeHandler());
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/PathTSPParameterHandler.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/PathTSPParameterHandler.cs	(revision 9350)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/PathTSPParameterHandler.cs	(revision 9350)
@@ -0,0 +1,33 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.TravelingSalesman;
+
+namespace HeuristicLab.Services.Optimization.ControllerService.Parameters.HL {
+  public class PathTSPParameterHandler : IParameterHandler<IItem> {
+    public Type HandledType {
+      get {
+        return typeof(PathTSPTour);
+      }
+    }
+
+    public Model.Parameter Map(IItem item) {
+      var tour = item as PathTSPTour;
+      var parameter = new Model.Parameter();
+      var resultMatrix = new Model.DecimalMatrix();
+      // simply create a matrix which contains all the coordinates in correct order
+      // the client may now display them as table
+      double[][] matrix = new double[tour.Permutation.Length][];
+      
+      for (var i=0; i < tour.Permutation.Length; i++) {
+        matrix[i] = new double[2];
+        matrix[i][0] = tour.Coordinates[tour.Permutation[i], 0];
+        matrix[i][1] = tour.Coordinates[tour.Permutation[i], 1];
+      }
+      parameter.Value = new Model.DecimalMatrix() { Value = matrix };
+      return parameter;
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/PermutationTypeHandler.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/PermutationTypeHandler.cs	(revision 9350)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/HL/PermutationTypeHandler.cs	(revision 9350)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Services.Optimization.ControllerService.Parameters.HL {
+  public class PermutationTypeHandler : IParameterHandler<IItem> {
+    public Type HandledType {
+      get { return typeof(PermutationType); }
+    }
+
+    public Model.Parameter Map(IItem item) {
+      var permType = item as PermutationType;
+      return  new Model.Parameter() {
+        Value = new Model.StringValue() { Value = permType.Value.ToString() }
+      };
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/ParameterHandler.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/ParameterHandler.cs	(revision 9350)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parameters/ParameterHandler.cs	(revision 9350)
@@ -0,0 +1,46 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Services.Optimization.ControllerService.Model;
+
+namespace HeuristicLab.Services.Optimization.ControllerService.Parameters {
+  public interface IParameterHandler<I> {
+    Type HandledType { get; }
+    Parameter Map(I item);
+  };
+
+  public class ParameterMappingException : Exception {
+    public ParameterMappingException(string message) : base(message) {
+    }
+  }
+
+  public class ParameterMapper<I> {
+    Dictionary<Type, IParameterHandler<I>> handlers = new Dictionary<Type,IParameterHandler<I>>();
+
+    public ParameterMapper() {
+    }
+
+    public void Register(IParameterHandler<I> handler) {
+      handlers[handler.HandledType] = handler;
+    }
+
+    public bool IsHandlerAvailable(I element) {
+      return handlers.ContainsKey(element.GetType());
+    }
+
+    public Parameter Map(string name, I element) {
+      if (element == null)
+        throw new ArgumentNullException("Element parameter may not be null");
+      IParameterHandler<I> handler;
+      if (handlers.TryGetValue(element.GetType(), out handler)) {
+        var param = handler.Map(element);
+        if (param == null)
+          throw new ParameterMappingException("Handler '" + handler.GetType().FullName + "' returned null parameter for type " + element.GetType().FullName);
+        param.Value.Name = name;
+        return param;
+      }
+      throw new ParameterMappingException("No handler for type " + element.GetType().FullName);
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parsers/AlgorithmConverter.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parsers/AlgorithmConverter.cs	(revision 9324)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Controller/Parsers/AlgorithmConverter.cs	(revision 9350)
@@ -189,4 +189,5 @@
       jrun["name"] = run.Name;
       jrun["results"] = ConvertParametersToJson(run.Results);
+      jrun["params"] = ConvertParametersToJson(run.InputParameters);
       return jrun;
     }
@@ -196,4 +197,23 @@
       foreach (var run in runs)
         jarray.Add(ConvertRunToJson(run));
+      
+      
+      // if there are multiple different jobs to execute and they have the same id, we must change it here manually
+      var maxId = new Dictionary<string,int>();
+      for (int i = 0; i < jarray.Count; i++) {
+        for (int j = i + 1; j < jarray.Count; j++) {
+          if (jarray[i]["id"].ToString() == jarray[j]["id"].ToString()) {
+            int max;
+            if (!maxId.TryGetValue(jarray[i]["id"].ToString(), out max)) {
+              max = 1;
+              maxId[jarray[i]["id"].ToString()] = max;              
+            }
+            maxId[jarray[i]["id"].ToString()]++;
+            // change j's entry
+            jarray[j]["id"] = jarray[j]["id"].ToString() + " (" + max + ")";
+            jarray[j]["name"] = jarray[j]["name"] + " (" + max + ")";
+          }
+        }
+      }
       return jarray;
     }
