Index: branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/experiment.view.js
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/experiment.view.js	(revision 9335)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/experiment.view.js	(revision 9350)
@@ -824,12 +824,26 @@
             var datatableSelect = $('.datatableOptions', ele);
 
-            var names = _.reduce(this.model.models, function (arr, model) {
-                return _.union(arr, _.map(model.get('results'), function (elem) { return elem.Name }));
-            }, []);
-
+            var names = [];
+            var previouslyFound = { results: {}, params: {} };
+            _.each(this.model.models, function (model) {
+                _.each(model.get('results'), function (res) {
+                    if (!previouslyFound['results'][res.Name]) {
+                        previouslyFound['results'][res.Name] = true;
+                        names.push({ name: res.Name, source: 'results' });
+                    }
+                });
+                _.each(model.get('params'), function (res) {
+                    if (!previouslyFound['params'][res.Name]) {
+                        previouslyFound['params'][res.Name] = true;
+                        names.push({ name: res.Name, source: 'params' });
+                    }
+                });
+            });
+            previouslyFound = {};
+            this.options.modelMapping = names;
             this.bubbleSelect = $('select[class="bubbleSize"]', ele);
 
-            _.each(names, function (name) {
-                var option = $("<option />", { value: name, text: name });
+            _.each(names, function (entry) {
+                var option = $("<option />", { value: entry.name, text: entry.name });
                 option.clone().appendTo(xAxisSelect);
                 option.clone().appendTo(yAxisSelect);
@@ -837,12 +851,12 @@
                 var rowNames = null;
                 var foundModel = _.find(self.model.models, function (model) {
-                    var entry = _.find(model.get('results'), function (entry) { return entry.Name == name && entry.RowNames });
-                    if (entry)
-                        rowNames = entry.RowNames;
-                    return entry && entry.RowNames;
+                    var e = _.find(model.get(entry.source), function (e) { return e.Name == entry.name && e.RowNames });
+                    if (e)
+                        rowNames = e.RowNames;
+                    return e && e.RowNames;
                 });
                 if (rowNames) {
-                    self.options.datatables[name] = rowNames;
-                    $('<option />', { value: name, text: name }).appendTo(datatableSelect);
+                    self.options.datatables[entry.name] = rowNames;
+                    $('<option />', { value: entry.name, text: entry.name }).appendTo(datatableSelect);
                 }
             });
@@ -852,4 +866,6 @@
             this.options.xAxis = this.model.models[0].get('results')[0].Name;
             this.options.yAxis = this.options.xAxis;
+            this.options.selectedXIndex = 0;
+            this.options.selectedYIndex = 0;
             this.options.plot = 'Boxplot';
             $('div[class="bubbleSlider"]', ele).slider({
@@ -909,4 +925,5 @@
         xAxisSelected: function (evt) {
             var target = $(evt.target);
+            this.options.selectedXIndex = target.prop("selectedIndex");
             this.options.xAxis = target.val();
             this.createPlot();
@@ -914,4 +931,5 @@
         yAxisSelected: function (evt) {
             var target = $(evt.target);
+            this.options.selectedYIndex = target.prop("selectedIndex");
             this.options.yAxis = target.val();
             this.createPlot();
@@ -967,25 +985,26 @@
         createBoxplot: function () {
             var self = this;
-
+            var parameterXSource = this.options.modelMapping[this.options.selectedXIndex].source; // either 'params' or 'results'
+            var parameterYSource = this.options.modelMapping[this.options.selectedYIndex].source; // either 'params' or 'results'
             // prepare data for boxplot
             var values = {};
             for (var i = 0; i < this.model.models.length; i++) {
-                var xlabel = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.options.xAxis });
+                var xlabel = _.find(this.model.models[i].get(parameterXSource), function (itm) { return itm.Name == self.options.xAxis });
                 if (!xlabel)
                     continue;
 
                 if ($.isArray(xlabel.Value))
-                    values[xlabel.Name + ' = ' + xlabel.Value[0]] = [];
+                    values[parameterXSource + '.' + xlabel.Name + ' = ' + xlabel.Value[0]] = [];
                 else
-                    values[xlabel.Name + ' = ' + xlabel.Value] = [];
+                    values[parameterXSource + '.' + xlabel.Name + ' = ' + xlabel.Value] = [];
             }
 
             for (var i = 0; i < this.model.models.length; i++) {
-                var xlabel = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.options.xAxis });
-                var entry = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.options.yAxis });
+                var xlabel = _.find(this.model.models[i].get(parameterXSource), function (itm) { return itm.Name == self.options.xAxis });
+                var entry = _.find(this.model.models[i].get(parameterYSource), function (itm) { return itm.Name == self.options.yAxis });
                 if (!xlabel || !entry || !entry.Value)
                     continue;
 
-                var index = xlabel.Name + ' = ' + ($.isArray(xlabel.Value) ? xlabel.Value[0] : xlabel.Value);
+                var index = parameterXSource + '.' + xlabel.Name + ' = ' + ($.isArray(xlabel.Value) ? xlabel.Value[0] : xlabel.Value);
 
                 if ($.isArray(entry.Value))
@@ -1003,11 +1022,12 @@
         createBubblechart: function () {
             var self = this;
-
+            var parameterXSource = this.options.modelMapping[this.options.selectedXIndex].source; // either 'params' or 'results'
+            var parameterYSource = this.options.modelMapping[this.options.selectedYIndex].source; // either 'params' or 'results'
             // prepare data for bubble chart
             var values = [];
             var autoscaleBubbles = this.bubbleSelect.val() != 'Constant';
             for (var i = 0; i < this.model.models.length; i++) {
-                var xValue = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.options.xAxis });
-                var yValue = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.options.yAxis });
+                var xValue = _.find(this.model.models[i].get(parameterXSource), function (itm) { return itm.Name == self.options.xAxis });
+                var yValue = _.find(this.model.models[i].get(parameterYSource), function (itm) { return itm.Name == self.options.yAxis });
                 if (!xValue || !yValue)
                     continue;
@@ -1019,5 +1039,8 @@
                 } else {
                     var valueProvider = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.bubbleSelect.val(); });
-                    if (!valueProvider) {
+                    if (!valueProvider) 
+                        valueProvider = _.find(this.model.models[i].get('params'), function (itm) { return itm.Name == self.bubbleSelect.val(); });
+
+                    if (!valueProvider) {                        
                         size = this.options.bubbleSize;
                     } else {
@@ -1055,4 +1078,7 @@
             for (var i = 0; i < this.model.models.length; i++) {
                 var table = _.find(this.model.models[i].get('results'), function (itm) { return itm.Name == self.options.selectedDatatable });
+                if (!table)
+                    table = _.find(this.model.models[i].get('params'), function (itm) { return itm.Name == self.options.selectedDatatable });
+
                 if (!table)
                     continue;
Index: branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/job.model.js
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/job.model.js	(revision 9335)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/job.model.js	(revision 9350)
@@ -37,5 +37,5 @@
         poll: function () {
             var self = this;
-            this.fetch({ cache: false, update: true, success: function () {
+            this.fetch({ cache: false, reset: true, success: function () {
                 self._poll();
             }
Index: branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/job.view.js
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/job.view.js	(revision 9335)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/job.view.js	(revision 9350)
@@ -16,5 +16,4 @@
         initialize: function () {
             this.collection.bind('remove', this.render, this);
-            //this.collection.bind('a', this.render, this);
         },
         render: function () {
@@ -89,4 +88,5 @@
             rcv.render();
             for (var i = 0; i < this.model.models.length; i++) {
+                $('<h3></h3>').text(this.model.models[i].get('name')).appendTo(this.$el);
                 var rev = new my.ResultEntryView({ model: this.model.models[i], el: this.$el });
                 rev.render();
@@ -150,42 +150,57 @@
         initialize: function () {
             this.plotted = {};
+            this.plotted['params'] = {};
+            this.plotted['results'] = {};
         },
         render: function () {
             this.template = _.template($('#runTemplate').html());
             var table = $(this.template(this.model.attributes));
-            var body = $("tbody", table);
+            var body = $('tbody[class="results"]', table);
             table.appendTo(this.$el);
+            // render the results of the model
             var results = this.model.get('results');
             for (var i = 0; i < results.length; i++) {
-                var row = $('<tr/>').attr('data-index', i);
-                $('<td/>').text(results[i].Name).appendTo(row);
-                if ($.isArray(results[i].Value)) {
-                    var col = $('<td/>').appendTo(row);
-                    var tevDiv = $('<div/>');
-                    var plotDiv = $('<div/>').appendTo($('#tmp'));;
-                    this.plotted[i] = {};
-                    var tv = new my.TabView({
-                        model: [
-                          { name: 'Table', content: tevDiv },
-                          { name: 'Plot', content: plotDiv },
-                        ],
-                        el: col
-                    });
-                    this.listenTo(tv, 'tab-activated', this.tabActivated);
-                    tv.render();
-
-                }
-                else {
-                    $('<td/>').text(results[i].Value).appendTo(row);
-                }
-                row.appendTo(body);
-            }
+                this.renderModelEntry(results[i], i, body, 'results');
+            }
+
+            var inputs = this.model.get('params');
+            body = $('tbody[class="inputs"]', table);
+            for (var i = 0; i < inputs.length; i++) {
+                this.renderModelEntry(inputs[i], i, body, 'params');
+            }
+
+            var av = new my.AccordionView({el: $(table)});
+            av.render();
+        },
+        renderModelEntry: function(entry, index, body, attribute) {         
+            var row = $('<tr/>').attr('data-index', index).attr('data-attribute', attribute);
+            $('<td/>').text(entry.Name).appendTo(row);
+            if ($.isArray(entry.Value)) {
+                var col = $('<td/>').appendTo(row);
+                var tevDiv = $('<div/>');
+                var plotDiv = $('<div/>').appendTo($('#tmp'));                                
+                this.plotted[attribute][index] = {};
+                var tv = new my.TabView({
+                    model: [
+                        { name: 'Table', content: tevDiv },
+                        { name: 'Plot', content: plotDiv },
+                    ],
+                    el: col
+                });
+                this.listenTo(tv, 'tab-activated', this.tabActivated);
+                tv.render();
+            }
+            else {
+                $('<td/>').text(entry.Value).appendTo(row);
+            }
+            row.appendTo(body);
         },
         tabActivated: function (evt) {
             var index = parseInt(evt.element.parents('tr').attr('data-index'));
-            if (evt.name == 'Plot' && !this.plotted[index].Plot) {
-                this.plotted[index].Plot = true;
+            var attribute = evt.element.parents('tr').attr('data-attribute');
+            if (evt.name == 'Plot' && !this.plotted[attribute][index].Plot) {
+                this.plotted[attribute][index].Plot = true;
                 var plotDiv = $('<div/>').appendTo($('#tmp'));
-                var pv = new my.PlotView({ model: this.model.get('results')[index], el: plotDiv, transpose: true });
+                var pv = new my.PlotView({ model: this.model.get(attribute)[index], el: plotDiv, transpose: true });
                 pv.render();
                 plotDiv.appendTo(evt.element);
@@ -198,8 +213,11 @@
                 });
                 rv.render();
-            } else if (evt.name == 'Table' && !this.plotted[index].Table) {
-                this.plotted[index].Table = true;
-                var tevDiv = $('<div/>');
-                var tev = new my.TableEditView({ model: this.model.get('results')[index].Value, rowNames: this.model.get('results')[index].RowNames, useDatatable: true, el: tevDiv });
+                plotDiv.width(rv.$el.width());
+                plotDiv.height(rv.$el.height());
+                pv.refresh();
+            } else if (evt.name == 'Table' && !this.plotted[attribute][index].Table) {
+                this.plotted[attribute][index].Table = true;
+                var tevDiv = $('<div/>').css('overflow', 'scroll');
+                var tev = new my.TableEditView({ model: this.model.get(attribute)[index].Value, rowNames: this.model.get(attribute)[index].RowNames, useDatatable: true, el: tevDiv });
                 tev.render();
                 tevDiv.appendTo(evt.element)
