diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css b/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
index b2c5d50..3c83532 100644
--- a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
+++ b/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
@@ -19,7 +19,11 @@
     height: 300px;
   }
 
-  /* Loader */
+  .btn-chart, .btn-chart:hover {
+    color: #fff;
+  }
+
+  /* LOADER */
   .loader {
     font-size: 10px;
     margin: 50px auto;
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/js/main.js b/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/js/main.js
index ab302e0..5085813 100644
--- a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/js/main.js
+++ b/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/js/main.js
@@ -46,7 +46,7 @@
   this.sliceDetails = {};
 
   this.formatSliceDetails = (meters) => {
-    
+
   };
 
   this.getMeters = () => {
@@ -151,7 +151,7 @@
     templateUrl: 'templates/ceilometer-samples.tpl.html',
     controller: function(Ceilometer) {
 
-      Chart.defaults.global.colours = [
+      this.chartColors = [
         '#286090',
         '#F7464A',
         '#46BFBD',
@@ -160,6 +160,14 @@
         '#4D5360',
         '#8c4f9f'
       ];
+
+      this.chart = {
+        series: [],
+        labels: [],
+        data: []
+      }
+
+      Chart.defaults.global.colours = this.chartColors;
       
       this.chartType = 'line';
 
@@ -171,7 +179,7 @@
       // Mock
 
       /**
-      * Goe trough the array and format date to be used as labels
+      * Goes trough the array and format date to be used as labels
       *
       * @param Array data
       * @returns Array a list of labels
@@ -186,7 +194,7 @@
       };
 
       /**
-      * Goe trough the array and return a flat array of values
+      * Goes trough the array and return a flat array of values
       *
       * @param Array data
       * @returns Array a list of values
@@ -199,11 +207,46 @@
         }, []);
       }
 
-      this.addMeterToChart = (project_id) => {
-        this.chart['series'].push(project_id);
-        this.chart['data'].push(this.getData(this.samplesList[project_id]))
+      /**
+      * Add a samples to the chart
+      *
+      * @param string resource_id
+      */
+      this.chartMeters = [];
+      this.addMeterToChart = (resource_id) => {
+        this.chart['labels'] = this.getLabels(lodash.sortBy(this.samplesList[resource_id], 'timestamp'));
+        this.chart['series'].push(resource_id);
+        this.chart['data'].push(this.getData(lodash.sortBy(this.samplesList[resource_id], 'timestamp')));
+        this.chartMeters.push(resource_id);
+        lodash.remove(this.sampleLabels, {id: resource_id});
       }
 
+      this.removeFromChart = (resource_id) => {
+        this.chart.data.splice(this.chart.series.indexOf(resource_id), 1);
+        this.chart.series.splice(this.chart.series.indexOf(resource_id), 1);
+        this.chartMeters.splice(this.chartMeters.indexOf(resource_id), 1);
+        this.sampleLabels.push({
+          id: resource_id,
+          // TODO add resource name
+        })
+      };
+
+      /**
+      * Format samples to create a list of labels and ids
+      */
+     
+      this.formatSamplesLabels = (samples) => {
+
+        return lodash.uniq(samples.reduce((labels, item) => {
+          labels.push({
+            id: item.resource_id,
+            // TODO add resource name
+          });
+          return labels;
+        }, []), item => item.id);
+      }
+
+
       /**
       * Load the samples and format data
       */
@@ -213,15 +256,14 @@
         // Ceilometer.getSamples(this.name, this.tenant) //fetch one
         Ceilometer.getSamples(this.name) //fetch all
         .then(res => {
-          console.log(res);
+
+          // setup data for visualization
           this.samplesList = lodash.groupBy(res, 'resource_id');
-          console.log(this.samplesList);
-          res = lodash.sortBy(this.samplesList[this.tenant], 'timestamp');
-          this.chart = {
-            series: [this.tenant],
-            labels: this.getLabels(res),
-            data: [this.getData(res)]
-          }
+          this.sampleLabels = this.formatSamplesLabels(res);
+          
+          // add current meter to chart
+          this.addMeterToChart(this.tenant);
+
         })
         .catch(err => {
           console.warn(err);
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html b/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
index 8f1578d..9eb4638 100644
--- a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
+++ b/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
@@ -10,10 +10,9 @@
     </a>
   </div>
 </div>
-
 <div class="row" ng-if="!vm.loader">
   <form class="form-inline col-xs-8" ng-submit="vm.addMeterToChart(vm.addMeterValue)">
-    <select ng-model="vm.addMeterValue" class="form-control" ng-options="project as project for (project, meter) in vm.samplesList"></select>
+    <select ng-model="vm.addMeterValue" class="form-control" ng-options="resource.id as resource.id for resource in vm.sampleLabels"></select>
     <button class="btn btn-success"> 
       <i class="glyphicon glyphicon-plus"></i> Add
     </button>
@@ -31,10 +30,12 @@
 
   <div class="col-xs-12" ng-if="!vm.loader">
     <canvas ng-if="vm.chartType === 'line'" id="line" class="chart chart-line" chart-data="vm.chart.data" chart-options="{datasetFill: false}"
-      chart-labels="vm.chart.labels" chart-legend="true" chart-series="vm.chart.series">
+      chart-labels="vm.chart.labels" chart-legend="false" chart-series="vm.chart.series">
     </canvas>
     <canvas ng-if="vm.chartType === 'bar'" id="bar" class="chart chart-bar" chart-data="vm.chart.data"
-      chart-labels="vm.chart.labels" chart-legend="true" chart-series="vm.chart.series">
-    </canvas> 
+      chart-labels="vm.chart.labels" chart-legend="false" chart-series="vm.chart.series">
+    </canvas>
+    <!-- <pre>{{vm.chartMeters | json}}</pre> -->
+    <a ng-click="vm.removeFromChart(meter)" class="btn btn-chart" ng-style="{'background-color': vm.chartColors[$index]}" ng-repeat="meter in vm.chartMeters">{{meter}}</a>
   </div>
 </div>
\ No newline at end of file
