diff --git a/lsp/pages.js b/lsp/pages.js
index 254200fd..f0c0a0d2 100755
--- a/lsp/pages.js
+++ b/lsp/pages.js
@@ -1293,13 +1293,19 @@ function showTab(tabName,streamName) {
             ).append(
               $('<option>').text('Memory load').val('memload').addClass('axis_time')
             ).append(
-              $('<option>').text('Viewer location').val('coords').addClass('axis_coords')
+              $('<option>').text('Viewer location (LTS only)').val('coords').addClass('axis_coords')
             ).change(function(){
               switch ($(this).val()) {
                 case 'clients':
+                  $('#dataset-details .replace-dataset').text('amount of viewers');
+                  $('#dataset-details').show();
+                  break;
                 case 'upbps':
+                  $('#dataset-details .replace-dataset').text('bandwidth (up)');
+                  $('#dataset-details').show();
+                  break;
                 case 'downbps':
-                  $('#dataset-details .replace-dataset').text('amount of viewers')
+                  $('#dataset-details .replace-dataset').text('bandwidth (down)');
                   $('#dataset-details').show();
                   break;
                 default:
@@ -1391,7 +1397,7 @@ function showTab(tabName,streamName) {
                   }
                 }
                 else {
-                  var which = $('#dataset-details.cumuval.'+d.cumutype).val();
+                  var which = $('#dataset-details .cumuval.'+d.cumutype).val();
                   if (d.cumutype == 'stream') {
                     d.stream = which;
                   }
@@ -1400,18 +1406,28 @@ function showTab(tabName,streamName) {
                   }
                   switch (d.type) {
                     case 'clients':
-                      d.label = 'Viewers ('+d.stream+')';
+                      d.label = 'Viewers ('+which+')';
                       d.yaxistype = 'amount';
                       break;
                     case 'upbps':
-                      d.label = 'Bandwidth (up) ('+d.stream+')';
+                      d.label = 'Bandwidth (up) ('+which+')';
                       break;
                     case 'downbps':
-                      d.label = 'Bandwidth (down) ('+d.stream+')';
+                      d.label = 'Bandwidth (down) ('+which+')';
                       break;
                   }
                 }
               break;
+              case 'coords':
+                d.cumutype = $('#dataset-details input[name=cumutype]:checked').val();
+                if (d.cumutype == 'all') {
+                  var which = 'all';
+                }
+                else {
+                  var which = $('#dataset-details .cumuval.'+d.cumutype).val();
+                }
+                d.label = 'Viewer location ('+which+')';
+              break;
             }
             graph.datasets.push(d);
             getPlotData();
@@ -1506,6 +1522,30 @@ function showTab(tabName,streamName) {
       },10000);
       
       function getPlotData() {
+        var reqobj = {
+          totals: []
+        };
+        for (var g in graphs) {
+          for (var d in graphs[g].datasets) {
+            var set = graphs[g].datasets[d];
+            switch (set.type) {
+              case 'clients':
+              case 'upbps':
+              case 'downbps':
+                switch (set.cumutype) {
+                  case 'all':       reqobj['totals'].push({fields: [set.type]});                               break;
+                  case 'stream':    reqobj['totals'].push({fields: [set.type], streams: [set.stream]});        break;
+                  case 'protocol':  reqobj['totals'].push({fields: [set.type], protocols: [set.protocol]});    break;
+                }
+                set.sourceid = reqobj['totals'].length-1;
+                break;
+              case 'cpuload':
+              case 'memload':
+                reqobj['capabilities'] = {};
+                break;
+            }
+          }
+        }
         getData(function(data){
           for (var j in graphs) {
             for (var i in graphs[j].datasets) {
@@ -1513,7 +1553,7 @@ function showTab(tabName,streamName) {
             }
             drawGraph(graphs[j]);
           }
-        },{capabilities:true,totals:{}});
+        },reqobj);
       }
       
       function findDataset(dataobj,sourcedata) {
@@ -1549,16 +1589,16 @@ function showTab(tabName,streamName) {
           case 'downbps':
           case 'clients':
             //todo: depending on the stream..
-            if (!sourcedata.totals || !sourcedata.totals.data) {
+            if (!sourcedata.totals || !sourcedata.totals[dataobj.sourceid] || !sourcedata.totals[dataobj.sourceid].data) {
               dataobj.data.push([(now-600)*1000,0]);
               dataobj.data.push([now*1000,0]);
             }
             else {
               var fields = {};
-              for (var index in sourcedata.totals.fields) {
-                fields[sourcedata.totals.fields[index]] = index;
+              for (var index in sourcedata.totals[dataobj.sourceid].fields) {
+                fields[sourcedata.totals[dataobj.sourceid].fields[index]] = index;
               }
-              var time = sourcedata.totals.start;
+              var time = sourcedata.totals[dataobj.sourceid].start;
               dataobj.data = [];
               if (time > now-590) {
                 //prepend data with 0 
@@ -1566,20 +1606,20 @@ function showTab(tabName,streamName) {
                 dataobj.data.push([time*1000-1,0]);
               }
               var index = 0;
-              dataobj.data.push([[time*1000,sourcedata.totals.data[index][fields[dataobj.type]]]]);
-              for (var i in sourcedata.totals.interval) {
+              dataobj.data.push([[time*1000,sourcedata.totals[dataobj.sourceid].data[index][fields[dataobj.type]]]]);
+              for (var i in sourcedata.totals[dataobj.sourceid].interval) {
                 if ((i % 2) == 1) {
                   //fill gaps with 0
-                  time += sourcedata.totals.interval[i][1];
+                  time += sourcedata.totals[dataobj.sourceid].interval[i][1];
                   dataobj.data.push([time*1000,0]);
                 }
                 else {
-                  for (var j = 0; j < sourcedata.totals.interval[i][0]; j++) {
-                    time += sourcedata.totals.interval[i][1];
+                  for (var j = 0; j < sourcedata.totals[dataobj.sourceid].interval[i][0]; j++) {
+                    time += sourcedata.totals[dataobj.sourceid].interval[i][1];
                     index++;
-                    dataobj.data.push([time*1000,sourcedata.totals.data[index][fields[dataobj.type]]]);
+                    dataobj.data.push([time*1000,sourcedata.totals[dataobj.sourceid].data[index][fields[dataobj.type]]]);
                   }
-                  if (i < sourcedata.totals.interval.length-1) {
+                  if (i < sourcedata.totals[dataobj.sourceid].interval.length-1) {
                     dataobj.data.push([time*1000+1,0]);
                   }
                 }
@@ -1591,6 +1631,13 @@ function showTab(tabName,streamName) {
               }
             }
             break;
+          case 'coords':
+            //retrieve data
+            //format [lat,long]
+            
+            //testing data
+            dataobj.data = [[-54.657438,-65.11675],[49.725719,-1.941553],[-34.425464,172.677617],[76.958669,68.494178],[0,0]];
+            break;
         }
         
         
@@ -1605,20 +1652,21 @@ function showTab(tabName,streamName) {
         }
         switch (graph.type) {
           case 'coords':
-            //format [lat,long]
-            var data = [[-54.657438,-65.11675],[49.725719,-1.941553],[-34.425464,172.677617],[76.958669,68.494178],[0,0]];
-            //correct latitude according to the Miller cylindrical projection
-            for (var i in  data) {
-              var lat = data[i][0];
-              var lon = data[i][1];
-              //to radians
-              lat = Math.PI * lat / 180;
-              var y = 1.25 * Math.log(Math.tan(0.25 * Math.PI + 0.4 * lat));
-              data[i] = [lon,y];
+            plotsets = [];
+            for (var d in datasets) {
+              //put backend data into the correct projection
+              data = datasets[d].data;
+              //correct latitude according to the Miller cylindrical projection
+              for (var i in  data) {
+                var lat = data[i][0];
+                var lon = data[i][1];
+                //to radians
+                lat = Math.PI * lat / 180;
+                var y = 1.25 * Math.log(Math.tan(0.25 * Math.PI + 0.4 * lat));
+                data[i] = [lon,y];
+              }
+              plotsets.push({data:data});
             }
-            console.log(data);
-            
-            plotsets = [{data:data}];
             //make sure the plot area has the correct height/width ratio
             if ($('#'+graph.id+' .graphbackground').length == 0) {
               var parent = $('#'+graph.id+' .graph');