diff --git a/app/server-health/controllers/sensors-overview-controller.html b/app/server-health/controllers/sensors-overview-controller.html
index 3ad4aa6..5a6f95a 100644
--- a/app/server-health/controllers/sensors-overview-controller.html
+++ b/app/server-health/controllers/sensors-overview-controller.html
@@ -5,11 +5,12 @@
   </div>
   <section class="row column">
     <div class="page-header">
-      <h2 class="inline">All Sensors information </h2>
-      <a ng-href="data:text/json;charset=utf-8,{{fullSensorsInfo}}" class="inline btn-export float-right" download="{{export_name}}">Export</a>
+      <h2 class="inline">All sensors present in the system</h2>
+      <a ng-href="data:text/json;charset=utf-8,{{export_data}}" class="inline btn-export float-right" download="{{export_name}}">Export</a>
     </div>
   </section>
   <section class="row column">
+    <!-- search -->
     <p class="content-label" aria-label="sensors filter">Filter sensors</p>
     <div class="content__search">
       <label for="content__search-input">Sensors Search</label>
@@ -18,7 +19,7 @@
         <button class="clear-input" ng-click="clear()">&#10005;</button>
         <input id="content__search-submit" type="submit" class="btn btn-primary content__search-submit" value="Filter" ng-click="doSearchOnClick()"/>
       </div>
-    </div>
+    </div>  <!-- end search -->
 
     <div class="toggle-filter">
       <p class="content-label">FILTER BY SEVERITY</p>
@@ -31,74 +32,41 @@
       <button class="inline" ng-click="toggleSeverity('warning')"
           ng-class="selectedSeverity.warning ? 'btn-primary' : 'btn-secondary'">Warning
       </button>
-      <button class="inline" ng-click="toggleSeverity('ok')"
-          ng-class="selectedSeverity.ok ? 'btn-primary' : 'btn-secondary'">OK
+      <button class="inline" ng-click="toggleSeverity('normal')"
+          ng-class="selectedSeverity.normal ? 'btn-primary' : 'btn-secondary'">Normal
       </button>
     </div>
-    <div class="select__filter">
-      <p class="content-label">Select Component</p>
-      <div class="inline dropdown__wrapper" >
-        <button type="button" class="dropdown__button" ng-click="showCompDropdown = !showCompDropdown" ng-disabled="fullSensorsInfo.length <= 1"><strong>{{selectedComponent.Name}}</strong></button>
-        <ul class="dropdown__list inline" ng-show="showCompDropdown">
-          <li>
-            <button type="button" ng-click="selectComponent(-1);">All</button>
-          </li>
-          <li ng-repeat="component in fullSensorsInfo track by $index">
-            <button type="button" ng-click="selectComponent($index);">{{component.Name}}</button>
-          </li>
-        </ul>
-      </div>
-    </div>
+
   </section>
 
-  <section class="row column" ng-show="(filteredVoltSensors.length + filteredTempSensors.length + filteredFanSensors.length) == 0">
+  <section class="row column" ng-show="filteredSensorData.length == 0">
+    <!-- message -->
     <span ng-if="selectedSeverity.all">{{messages.NO_SENSOR_DATA}}</span>
     <span ng-if="selectedSeverity.critical">{{messages.CRITICAL_NO_SENSOR_DATA}}</span>
     <span ng-if="selectedSeverity.warning">{{messages.WARNING_NO_SENSOR_DATA}}</span>
-    <span ng-if="selectedSeverity.ok">{{messages.NORMAL_NO_SENSOR_DATA}}</span>
+    <span ng-if="selectedSeverity.normal">{{messages.NORMAL_NO_SENSOR_DATA}}</span>
+    <!-- end message -->
   </section>
-  <section id="sensor-categories" class="table row column" ng-hide="(filteredVoltSensors.length + filteredTempSensors.length + filteredFanSensors.length) == 0">
-      <div class="table row column sensor__table" ng-hide="loading">
-        <div class="table__head fixed-table-header">
-          <div class="table__row">
-            <div class="table__cell sensor__title">Name</div>
-            <div class="table__cell sensor__status">Status</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">LC</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">LW</div>
-            <div class="table__cell sensor__reading">Reading</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">HW</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">HC</div>
-          </div>
-        </div>
-        <div class="table__body">
-          <div class="table__row" ng-repeat="sensor in (filteredVoltSensors = (sensorsInfo.Voltages | filter:filterBySearchTerms | filter:filterBySeverity))">
-            <div class="table__cell sensor__title">{{sensor.Name}}</div>
-            <div class="table__cell sensor__status sensor__{{sensor.Status.Health}}">{{sensor.Status.Health}}</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.LowerThresholdCritical | number:2}} Volts</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.LowerThresholdNonCritical | number:2}} Volts</div>
-            <div class="table__cell sensor__reading">{{sensor.ReadingVolts | number:2}} Volts</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.UpperThresholdNonCritical | number:2}} Volts</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.UpperThresholdCritical | number:2}} Volts</div>
-          </div>
-          <div class="table__row" ng-repeat="sensor in (filteredTempSensors = (sensorsInfo.Temperatures | filter:filterBySearchTerms | filter:filterBySeverity))">
-            <div class="table__cell sensor__title">{{sensor.Name}}</div>
-            <div class="table__cell sensor__status sensor__{{sensor.Status.Health}}">{{sensor.Status.Health}}</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.LowerThresholdCritical | number:2}} &deg;C</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.LowerThresholdNonCritical | number:2}} &deg;C</div>
-            <div class="table__cell sensor__reading">{{sensor.ReadingCelsius | number:2}} &deg;C</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.UpperThresholdNonCritical | number:2}} &deg;C</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.UpperThresholdCritical | number:2}} &deg;C</div>
-          </div>
-          <div class="table__row" ng-repeat="sensor in (filteredFanSensors = (sensorsInfo.Fans | filter:filterBySearchTerms | filter:filterBySeverity))">
-            <div class="table__cell sensor__title">{{sensor.Name}}</div>
-            <div class="table__cell sensor__status sensor__{{sensor.Status.Health}}">{{sensor.Status.Health}}</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.LowerThresholdCritical | number:2}} {{sensor.ReadingUnits}}</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">{{sensor.LowerThresholdNonCritical | number:2}} {{sensor.ReadingUnits}}</div>
-            <div class="table__cell sensor__reading">{{sensor.Reading | number:2}} {{sensor.ReadingUnits}}</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">NA</div>
-            <div class="table__cell sensor__threshold" ng-show="showThresholds">NA</div>
-          </div>
-        </div>
+
+  <section id="sensor-categories" class="row column" ng-show="filteredSensorData.length">
+    <div class="row column header-row fixed-table-header">
+      <div class="column large-12 header__actions-bar">
+        <p class="inline sensor__title">Sensors ({{filteredSensorData.length}})</p>
+        <p class="inline sensor__reading">Low critical</p>
+        <p class="inline sensor__reading">Low warning</p>
+        <p class="inline sensor__reading sensor__heading-current">Current</p>
+        <p class="inline sensor__reading">High warning</p>
+        <p class="inline sensor__reading">High critical</p>
       </div>
+    </div>
+    <!-- sensor -->
+    <div class="sensor__readings-row" ng-repeat="sensor in data|filter:filterBySeverity|filter:filterBySearchTerms|orderBy:'+custom_order' as filteredSensorData">
+      <p class="inline sensor__title"><span class="icon" ng-class="{'icon__critical': sensor.status == 'critical', 'icon__warning': sensor.status == 'warning', 'icon__normal': sensor.status == 'normal'}" aria-label="sensor.status" ></span>{{sensor.title}}</p>
+      <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>{{sensor.CriticalLow}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">&deg;</span></p>
+      <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>{{sensor.WarningLow}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">&deg;</span></p>
+      <p class="inline sensor__reading sensor__current" ng-class="{'sensor__critical': sensor.status == 'critical', 'sensor__warn': sensor.status == 'warning', 'sensor__normal': sensor.status == 'normal'}"><span class="sensor__label">Current</span>{{sensor.Value}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">&deg;</span></span></p>
+      <p class="inline sensor__reading"><span class="sensor__label">High warning</span>{{sensor.WarningHigh}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">&deg;</span></p>
+      <p class="inline sensor__reading"><span class="sensor__label">High critical</span>{{sensor.CriticalHigh}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">&deg;</span></p>
+    </div>
   </section>
 </div>
diff --git a/app/server-health/controllers/sensors-overview-controller.js b/app/server-health/controllers/sensors-overview-controller.js
index 96349d2..40e0b58 100644
--- a/app/server-health/controllers/sensors-overview-controller.js
+++ b/app/server-health/controllers/sensors-overview-controller.js
@@ -9,27 +9,27 @@
 window.angular && (function(angular) {
   'use strict';
   angular.module('app.overview').controller('sensorsOverviewController', [
-    '$scope', '$q', '$window', 'APIUtils', 'dataService', 'Constants',
-    function($scope, $q, $window, APIUtils, dataService, Constants) {
+    '$scope', '$log', '$window', 'APIUtils', 'dataService', 'Constants',
+    function($scope, $log, $window, APIUtils, dataService, Constants) {
       $scope.dataService = dataService;
 
-      $scope.loading = false;
-      $scope.componentList = [];
-      $scope.sensorsInfo = {};
-      $scope.fullSensorsInfo = [];
-      $scope.selectedComponent = {};
-      $scope.showThresholds = true;  // TODO: add button to toggle this..
-      $scope.showCompDropdown = false;
+      $scope.dropdown_selected = false;
+
+      $scope.$log = $log;
       $scope.customSearch = '';
       $scope.searchTerms = [];
       $scope.messages = Constants.MESSAGES.SENSOR;
-      $scope.filteredVoltSensors = [];
-      $scope.filteredTempSensors = [];
-      $scope.filteredFanSensors = [];
-
       $scope.selectedSeverity =
-          {all: true, ok: false, warning: false, critical: false};
+          {all: true, normal: false, warning: false, critical: false};
       $scope.export_name = 'sensors.json';
+      $scope.loading = false;
+      $scope.jsonData = function(data) {
+        var dt = {};
+        data.data.forEach(function(item) {
+          dt[item.original_data.key] = item.original_data.value;
+        });
+        return JSON.stringify(dt);
+      };
 
       $scope.clear = function() {
         $scope.customSearch = '';
@@ -64,7 +64,7 @@
         $scope.selectedSeverity.all = !$scope.selectedSeverity.all;
 
         if ($scope.selectedSeverity.all) {
-          $scope.selectedSeverity.ok = false;
+          $scope.selectedSeverity.normal = false;
           $scope.selectedSeverity.warning = false;
           $scope.selectedSeverity.critical = false;
         }
@@ -73,9 +73,9 @@
       $scope.toggleSeverity = function(severity) {
         $scope.selectedSeverity[severity] = !$scope.selectedSeverity[severity];
 
-        if (['ok', 'warning', 'critical'].indexOf(severity) > -1) {
+        if (['normal', 'warning', 'critical'].indexOf(severity) > -1) {
           if ($scope.selectedSeverity[severity] == false &&
-              (!$scope.selectedSeverity.ok &&
+              (!$scope.selectedSeverity.normal &&
                !$scope.selectedSeverity.warning &&
                !$scope.selectedSeverity.critical)) {
             $scope.selectedSeverity.all = true;
@@ -83,10 +83,10 @@
           }
         }
 
-        if ($scope.selectedSeverity.ok && $scope.selectedSeverity.warning &&
+        if ($scope.selectedSeverity.normal && $scope.selectedSeverity.warning &&
             $scope.selectedSeverity.critical) {
           $scope.selectedSeverity.all = true;
-          $scope.selectedSeverity.ok = false;
+          $scope.selectedSeverity.normal = false;
           $scope.selectedSeverity.warning = false;
           $scope.selectedSeverity.critical = false;
         } else {
@@ -98,87 +98,31 @@
         if ($scope.selectedSeverity.all) return true;
 
         return (
-            ((sensor.Status.Health == 'OK') && $scope.selectedSeverity.ok) ||
-            ((sensor.Status.Health == 'Warning') &&
+            (sensor.severity_flags.normal && $scope.selectedSeverity.normal) ||
+            (sensor.severity_flags.warning &&
              $scope.selectedSeverity.warning) ||
-            ((sensor.Status.Health == 'Critical') &&
+            (sensor.severity_flags.critical &&
              $scope.selectedSeverity.critical));
       };
       $scope.filterBySearchTerms = function(sensor) {
         if (!$scope.searchTerms.length) return true;
 
         for (var i = 0, length = $scope.searchTerms.length; i < length; i++) {
-          // TODO: Form it while getting data
-          var search_text = sensor.Name.toLowerCase();
-          if (search_text.indexOf($scope.searchTerms[i].toLowerCase()) == -1)
+          if (sensor.search_text.indexOf($scope.searchTerms[i].toLowerCase()) ==
+              -1)
             return false;
         }
         return true;
       };
 
-      $scope.selectComponent = function(index) {
-        $scope.loading = true;
-        $scope.showCompDropdown = false;
-        if (index == -1) {
-          // Flattened sensor data to display all sensors.
-          $scope.selectedComponent = {'Name': 'All'};
-          $scope.sensorsInfo = {'Temperatures': [], 'Fans': [], 'Voltages': []};
-          // Looping through all chassis collections to flattened sensors data
-          angular.forEach($scope.fullSensorsInfo, function(record) {
-            $scope.sensorsInfo.Temperatures = [].concat(
-                $scope.sensorsInfo.Temperatures, record.sensors.Temperatures);
-            $scope.sensorsInfo.Fans =
-                [].concat($scope.sensorsInfo.Fans, record.sensors.Fans);
-            $scope.sensorsInfo.Voltages =
-                [].concat($scope.sensorsInfo.Voltages, record.sensors.Voltages);
-          });
-        } else {
-          $scope.selectedComponent = $scope.fullSensorsInfo[index];
-          $scope.sensorsInfo = $scope.selectedComponent['sensors'];
-        }
-        $scope.loading = false;
-      };
-
-      function getComponentSensors(component) {
-        var data = component;
-        data['sensors'] = {'Temperatures': [], 'Fans': [], 'Voltages': []};
-        APIUtils.getSensorsInfo(component.Thermal['@odata.id'])
-            .then(function(res) {
-              if (res.hasOwnProperty('Temperatures')) {
-                data.sensors['Temperatures'] = res.Temperatures;
-              }
-              if (res.hasOwnProperty('Fans')) {
-                data.sensors['Fans'] = res.Fans;
-              }
-              return;
-            });
-        APIUtils.getSensorsInfo(component.Power['@odata.id'])
-            .then(function(res) {
-              if (res.hasOwnProperty('Voltages')) {
-                data.sensors['Voltages'] = res.Voltages;
-              }
-              return;
-            });
-        return data;
-      };
-
       $scope.loadSensorData = function() {
         $scope.loading = true;
-        APIUtils.getAllChassisCollection()
-            .then(
-                function(chassisList) {
-                  angular.forEach(chassisList, function(chassis) {
-                    var resData = getComponentSensors(chassis);
-                    $scope.fullSensorsInfo.push(resData);
-                  });
-                },
-                function(error) {
-                  console.log(JSON.stringify(error));
-                })
-            .finally(function() {
-              $scope.selectComponent(0);
-              $scope.loading = false;
-            });
+        APIUtils.getAllSensorStatus(function(data, originalData) {
+          $scope.data = data;
+          $scope.originalData = originalData;
+          $scope.export_data = JSON.stringify(originalData);
+          $scope.loading = false;
+        });
       };
 
       $scope.loadSensorData();
