diff --git a/app/server-health/controllers/sensors-controller.html b/app/server-health/controllers/sensors-controller.html
index 15720c1..64a0fff 100644
--- a/app/server-health/controllers/sensors-controller.html
+++ b/app/server-health/controllers/sensors-controller.html
@@ -5,7 +5,7 @@
     <section class="row column">
         <div class="page-header">
             <h2 class="inline h4">Sensors present in the system</h2>
-            <button class="inline btn-export float-right">Export</button>
+            <a ng-href="data:text/json;charset=utf-8,{{export_data}}" class="inline btn-export float-right"  download="{{export_name}}" ng-show="filteredSensorData.length">Export</a>
         </div>
     </section>
 
@@ -14,20 +14,22 @@
         <!-- search -->
         <div class="content__search">
             <label for="content__search-input">Sensors Search</label>
-            <input id="content__search-input" type="text" placeholder="Filter issues"/>
-            <input id="content__search-submit" type="submit" class="btn btn-secondary" value="Submit"/>
+            <input id="content__search-input" type="text" placeholder="Filter issues" ng-model="customSearch" ng-keydown="doSearchOnEnter($event)"/>
+            <input id="content__search-submit" type="submit" class="btn btn-secondary" value="Submit" ng-click="doSearchOnClick()"/>
         </div>
+
         <div class="toggle-filter">
-            <button class="inline first btn-primary">All
+            <button class="inline first btn-primary" ng-click="toggleSeverityAll()"
+                    ng-class="selectedSeverity.all ? 'btn-primary' : 'btn-secondary'">All
             </button>
-            <button class="inline " ng-click="togglehigh = !togglehigh"
-                    ng-class="togglehigh ? 'btn-primary' : 'btn-secondary'">Critical
+            <button class="inline " ng-click="toggleSeverity('critical')"
+                    ng-class="selectedSeverity.critical ? 'btn-primary' : 'btn-secondary'">Critical
             </button>
-            <button class="inline" ng-click="togglemed = !togglemed"
-                    ng-class="togglemed ? 'btn-primary' : 'btn-secondary'">Warning
+            <button class="inline" ng-click="toggleSeverity('warning')"
+                    ng-class="selectedSeverity.warning ? 'btn-primary' : 'btn-secondary'">Warning
             </button>
-            <button class="inline last" ng-click="togglelow = !togglelow"
-                    ng-class="togglelow ? 'btn-primary' : 'btn-secondary'">Normal
+            <button class="inline last" ng-click="toggleSeverity('normal')"
+                    ng-class="selectedSeverity.normal ? 'btn-primary' : 'btn-secondary'">Normal
             </button>
         </div>
     </section> <!-- end filter -->
@@ -38,25 +40,25 @@
     </div>
     </section>
 
-    <section id="sensor__details" class="row column">
+    <section id="sensor__details" class="row column" ng-hide="!data.display_headers">
         <div class="row column header-row">
             <div class="column small-10 large-11 header__actions-bar">
                 <p class="inline priority-tag-circ high-priority" aria-label="High Priority"></p>
-                <p class="inline sensor__heading sensor__category">Fan speed (RPMs)</p>
-                <p class="inline sensor__heading middle">Reading</p>
-                <p class="inline float-right sensor__heading right">State</p>
+                <p class="inline sensor__heading sensor__category">{{data.display_headers[0]}}</p>
+                <p class="inline sensor__heading middle">{{data.display_headers[1]}}</p>
+                <p class="inline float-right sensor__heading right">{{data.display_headers[2]}}</p>
             </div>
             <div class="column small-2 large-1 sensor__heading trigger-col"></div>
         </div>
 
         <!-- Sensor -->
-        <div class="row column accord-row" ng-class="{'active': sensors__metadatarow, 'selected': sensors__selected}">
+        <div ng-repeat="sensor in (filteredSensorData = (data.data|filter:filterBySeverity|filter:filterBySearchTerms))" class="row column accord-row" ng-class="{'active': sensors__metadatarow, 'selected': sensors__selected}">
             <div class="row">
                 <div class="column small-10 large-11 sensor__info" ng-click="sensors__metadatarow = ! sensors__metadatarow">
                     <p class="inline priority-tag-circ high-priority" aria-label="High Priority"></p>
-                    <p class="inline sensor__title">Fan Speed 1</p>
-                    <p class="inline sensor__reading">6200 <span>rpms</span></p>
-                    <p class="inline float-right sensor__critical-label">Critical</p>
+                    <p class="inline sensor__title">{{sensor.title}}</p>
+                    <p class="inline sensor__reading">{{sensor.reading}}</p>
+                    <p class="inline float-right" ng-class="{'sensor__critical-label': sensor.status == 'critical', 'sensor__warning-label': sensor.status == 'warning', 'sensor__normal-label': sensor.status == 'normal'}">{{sensor.status}}</p>
                 </div>
                 <div class="column small-2 large-1">
                     <button class="accord-trigger" ng-class="{'active': sensors__metadatarow}" ng-click="sensors__metadatarow = ! sensors__metadatarow"></button>
@@ -67,7 +69,7 @@
                     <div class="threshold-chart__wrapper">
                         <span class="threshold__label low">Low</span>
                         <div class="threshold-chart">
-                            <span class="threshold__marker thresh__high-critical" style="left: 90%;"><span class="threshold__value">6200 RPMs</span></span>
+                            <span class="threshold__marker"  ng-class="{'thresh__high-critical': sensor.status == 'critical', 'thresh__low-warn': sensor.status == 'warning', 'thresh__normal': sensor.status == 'normal'}" style="left: {{sensor.indicator}};"><span class="threshold__value">{{sensor.reading}}</span></span>
                             <span class="threshold thresh__low-critical"></span>
                             <span class="threshold thresh__low-warn"></span>
                             <span class="threshold thresh__normal"></span>
@@ -77,94 +79,8 @@
                         <span class="threshold__label high">High</span>
                     </div>
                 </div>
-                <!--<div class="column small-12 large-6">-->
-                    <!--<p class="h5 content-header">Associated Events</p>-->
-                    <!--<a href="#/overview/log">View 5 events related to Fan 1</a>-->
-                <!--</div>-->
-                <!--<div class="column small-12 large-6">-->
-                    <!--<p class="h5 content-header">Associated Hardware</p>-->
-                    <!--<a href="">Chassis0</a>-->
-                <!--</div>-->
             </div>
         </div>
 
-        <!-- Sensor -->
-        <div class="row column accord-row" ng-class="{'active': sensors__metadatarow2, 'selected': sensors__selected}">
-            <div class="row">
-                <div class="column small-10 large-11 sensor__info" ng-click="sensors__metadatarow2 = ! sensors__metadatarow2">
-                    <p class="inline priority-tag-circ normal-priority" aria-label="Normal Priority"></p>
-                    <p class="inline sensor__title">Fan Speed 2</p>
-                    <p class="inline sensor__reading">4600 <span>rpms</span></p>
-                </div>
-                <div class="column small-2 large-1">
-                    <button class="accord-trigger" ng-class="{'active': sensors__metadatarow2}" ng-click="sensors__metadatarow2 = ! sensors__metadatarow2"></button>
-                </div>
-            </div>
-            <div class="row sensors__metadata-row" ng-class="{'active': sensors__metadatarow2}">
-                <div class="column small-12">
-                    <div class="threshold-chart__wrapper">
-                        <span class="threshold__label low">Low</span>
-                        <div class="threshold-chart">
-                            <span class="threshold__marker thresh__normal" style="left: 40%;"><span class="threshold__value">4600 RPMs</span></span>
-                            <span class="threshold thresh__low-critical"></span>
-                            <span class="threshold thresh__low-warn"></span>
-                            <span class="threshold thresh__normal"></span>
-                            <span class="threshold thresh__high-warn"></span>
-                            <span class="threshold thresh__high-critical"></span>
-                        </div>
-                        <span class="threshold__label high">High</span>
-                    </div>
-                </div>
-                <!--<div class="column small-12 large-6">-->
-                    <!--<p class="h5 content-header">Associated Events</p>-->
-                    <!--<a href="#/overview/log">View 5 events related to Fan 1</a>-->
-                <!--</div>-->
-                <!--<div class="column small-12 large-6">-->
-                    <!--<p class="h5 content-header">Associated Hardware</p>-->
-                    <!--<p>None</p>-->
-                <!--</div>-->
-            </div>
-        </div>
-
-        <!-- Sensor -->
-        <div class="row column accord-row" ng-class="{'active': sensors__metadatarow3, 'selected': sensors__selected}">
-            <div class="row">
-                <div class="column small-10 large-11 sensor__info" ng-click="sensors__metadatarow3 = ! sensors__metadatarow3">
-                    <p class="inline priority-tag-circ warn-priority" aria-label="Medium Priority"></p>
-                    <p class="inline sensor__title">Fan Speed 3</p>
-                    <p class="inline sensor__reading">1200 <span>rpms</span></p>
-                    <p class="inline float-right sensor__warning-label">warning</p>
-                </div>
-                <div class="column small-2 large-1">
-                    <button class="accord-trigger" ng-class="{'active': sensors__metadatarow3}"
-                            ng-click="sensors__metadatarow3 = ! sensors__metadatarow3"></button>
-                </div>
-            </div>
-            <div class="row sensors__metadata-row" ng-class="{'active': sensors__metadatarow3}">
-                <div class="column small-12">
-                    <div class="threshold-chart__wrapper">
-                        <span class="threshold__label low">Low</span>
-                        <div class="threshold-chart">
-                            <span class="threshold__marker thresh__low-warn" style="left: 15%;"><span class="threshold__value">1200 RPMs</span></span>
-                            <span class="threshold thresh__low-critical"></span>
-                            <span class="threshold thresh__low-warn"></span>
-                            <span class="threshold thresh__normal"></span>
-                            <span class="threshold thresh__high-warn"></span>
-                            <span class="threshold thresh__high-critical"></span>
-                        </div>
-                        <span class="threshold__label high">High</span>
-                    </div>
-                </div>
-                <!--<div class="column small-12 large-6">-->
-                    <!--<p class="h5 content-header">Associated Events</p>-->
-                    <!--<a href="#/overview/log">View 5 events related to Fan 1</a>-->
-                <!--</div>-->
-                <!--<div class="column small-12 large-6">-->
-                    <!--<p class="h5 content-header">Associated Hardware</p>-->
-                    <!--<a href="">Chassis0</a>-->
-                <!--</div>-->
-            </div>
-        </div>
     </section>
-    <paginate ng-include="paginate"></paginate>
 </div> <!-- end event log -->
diff --git a/app/server-health/controllers/sensors-controller.js b/app/server-health/controllers/sensors-controller.js
index aaa5aa6..cf10541 100644
--- a/app/server-health/controllers/sensors-controller.js
+++ b/app/server-health/controllers/sensors-controller.js
@@ -9,7 +9,7 @@
 
 window.angular && (function (angular) {
     'use strict';
-
+    var sensorData = [], originalData = {};
     angular
         .module('app.overview')
         .controller('sensorsController', [
@@ -18,13 +18,120 @@
             '$window', 
             'APIUtils', 
             'dataService',
-            function($scope, $log, $window, APIUtils, dataService, userModel){
+            '$routeParams',
+            function($scope, $log, $window, APIUtils, dataService, $routeParams){
                 $scope.dataService = dataService;
-
+                $scope.customSearch = "";
                 $scope.dropdown_selected = false;
-
                 $scope.$log = $log;
-                $scope.message = 'Hello World!';
+                $scope.data = {};
+                $scope.searchTerms = [];
+
+                $scope.selectedSeverity = {
+                    all: true,
+                    normal: false,
+                    warning: false,
+                    critical: false
+                };
+
+                var sensorType = $routeParams.type;
+
+                $scope.export_name = sensorType + "_sensors.json";
+
+                $scope.toggleSeverityAll = function(){
+                    $scope.selectedSeverity.all = !$scope.selectedSeverity.all;
+
+                    if($scope.selectedSeverity.all){
+                        $scope.selectedSeverity.normal = false;
+                        $scope.selectedSeverity.warning = false;
+                        $scope.selectedSeverity.critical = false;
+                    }
+                }
+
+                $scope.toggleSeverity = function(severity){
+                    $scope.selectedSeverity[severity] = !$scope.selectedSeverity[severity];
+
+                    if($scope.selectedSeverity.normal && 
+                       $scope.selectedSeverity.warning && 
+                       $scope.selectedSeverity.critical){
+                        $scope.selectedSeverity.all = true;
+                        $scope.selectedSeverity.normal = false;
+                        $scope.selectedSeverity.warning = false;
+                        $scope.selectedSeverity.critical = false;
+                    }else{
+                        $scope.selectedSeverity.all = false;
+                    }
+                }
+
+                $scope.doSearchOnEnter = function (event) {
+                    var search = $scope.customSearch.replace(/^\s+/g,'').replace(/\s+$/g,'');
+                    if (event.keyCode === 13 &&
+                        search.length >= 2) {
+                        $scope.searchTerms = $scope.customSearch.split(" ");
+                    }else{
+                        if(search.length == 0){
+                            $scope.searchTerms = [];
+                        }
+                    }
+                };
+
+                $scope.doSearchOnClick = function() {
+                    var search = $scope.customSearch.replace(/^\s+/g,'').replace(/\s+$/g,'');
+                    if (search.length >= 2) {
+                        $scope.searchTerms = $scope.customSearch.split(" ");
+                    }else{
+                        if(search.length == 0){
+                            $scope.searchTerms = [];
+                        }
+                    }
+                }
+
+                $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.filterBySeverity = function(sensor){
+                    if($scope.selectedSeverity.all) return true;
+
+                    return( (sensor.severity_flags.normal && $scope.selectedSeverity.normal) ||
+                            (sensor.severity_flags.warning && $scope.selectedSeverity.warning) ||
+                            (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++){
+                        if(sensor.search_text.indexOf($scope.searchTerms[i].toLowerCase()) == -1) return false;
+                    }
+                    return true;
+                }
+
+                function setSensorData(){
+                    var data = dataService.sensorData.sensors.filter(function(item){
+                        return item.type == sensorType;
+                    });
+                    if(data.length){
+                        sensorData = data[0];
+                        $scope.data = sensorData;
+                        $scope.export_data = $scope.jsonData($scope.data);
+                    }
+                }
+
+                if(!dataService.sensorData.sensors){
+                    APIUtils.getAllSensorStatus(function(data, originalData){
+                        dataService.sensorData = data;
+                        setSensorData();
+                    });
+                }else{
+                    setSensorData();
+                }
+
             }
         ]
     );
diff --git a/app/server-health/controllers/sensors-overview-controller.html b/app/server-health/controllers/sensors-overview-controller.html
index 10ee4fa..6a8f3c4 100644
--- a/app/server-health/controllers/sensors-overview-controller.html
+++ b/app/server-health/controllers/sensors-overview-controller.html
@@ -5,7 +5,7 @@
     <section class="row column">
         <div class="page-header">
             <h2 class="inline h4">Sensors present in the system</h2>
-            <button class="inline btn-export float-right">Export</button>
+            <a ng-href="data:text/json;charset=utf-8,{{export_data}}" class="inline btn-export float-right"  download="{{export_name}}" ng-show="filteredSensorData.length">Export</a>
         </div>
     </section>
 
@@ -13,20 +13,21 @@
         <!-- search -->
         <div class="content__search">
             <label for="content__search-input">Event Log Search</label>
-            <input id="content__search-input" type="text" placeholder="Filter issues"/>
-            <input id="content__search-submit" type="submit" class="btn btn-secondary" value="Submit"/>
+            <input id="content__search-input" type="text" placeholder="Filter issues" ng-model="customSearch" ng-keydown="doSearchOnEnter($event)"/>
+            <input id="content__search-submit" type="submit" class="btn btn-secondary" value="Submit" ng-click="doSearchOnClick()"/>
         </div>
         <div class="toggle-filter">
-            <button class="inline first btn-primary">All
+            <button class="inline first btn-primary" ng-click="toggleSeverityAll()"
+                    ng-class="selectedSeverity.all ? 'btn-primary' : 'btn-secondary'">All
             </button>
-            <button class="inline " ng-click="togglehigh = !togglehigh"
-                    ng-class="togglehigh ? 'btn-primary' : 'btn-secondary'">Critical
+            <button class="inline " ng-click="toggleSeverity('critical')"
+                    ng-class="selectedSeverity.critical ? 'btn-primary' : 'btn-secondary'">Critical
             </button>
-            <button class="inline" ng-click="togglemed = !togglemed"
-                    ng-class="togglemed ? 'btn-primary' : 'btn-secondary'">Warning
+            <button class="inline" ng-click="toggleSeverity('warning')"
+                    ng-class="selectedSeverity.warning ? 'btn-primary' : 'btn-secondary'">Warning
             </button>
-            <button class="inline last" ng-click="togglelow = !togglelow"
-                    ng-class="togglelow ? 'btn-primary' : 'btn-secondary'">Normal
+            <button class="inline last" ng-click="toggleSeverity('normal')"
+                    ng-class="selectedSeverity.normal ? 'btn-primary' : 'btn-secondary'">Normal
             </button>
         </div>
 
@@ -39,12 +40,8 @@
                 <p class="inline float-right sensor__heading right">State</p>
             </div>
         </div>
-        <a class="sensor__group" href="">All Sensors (50)</a>
-        <a class="sensor__group" href=""><span class="inline priority-tag-circ normal-priority" aria-label="Normal Priority"></span>Temperature (20)</a>
-        <a class="sensor__group" href="#/server-health/sensors"> <span class="inline priority-tag-circ high-priority" aria-label="High Priority"></span>Fan Speed (15) <p class="inline float-right sensor__critical-label">Critical</p></a>
-        <a class="sensor__group" href=""><span class="inline priority-tag-circ normal-priority" aria-label="Normal Priority"></span>Altitude (1)</a>
-        <a class="sensor__group" href=""><span class="inline priority-tag-circ normal-priority" aria-label="Normal Priority"></span>Voltage (6)</a>
-        <a class="sensor__group" href=""><span class="inline priority-tag-circ warn-priority" aria-label="Warning Priority"></span>Current (5) <p class="inline float-right sensor__warning-label">Warning</p></a>
-        <a class="sensor__group" href=""><span class="inline priority-tag-circ normal-priority"></span>Power (3)</a>
+
+        <a ng-repeat="sensor in (filteredSensorData = data.sensors|filter:filterBySeverity|filter:filterBySearchTerms)" class="sensor__group" href="#/server-health/sensors/{{sensor.type}}"> <span class="inline priority-tag-circ high-priority" aria-label="High Priority"></span>{{sensor.title}} ({{sensor.data.length}}) <p class="inline float-right" ng-class="{'sensor__critical-label': sensor.status == 'critical', 'sensor__warning-label': sensor.status == 'warning', 'sensor__normal-label': sensor.status == 'normal'}">{{sensor.status}}</p></a>
+
     </section>
 </div>
\ No newline at end of file
diff --git a/app/server-health/controllers/sensors-overview-controller.js b/app/server-health/controllers/sensors-overview-controller.js
index 1b7234d..1e53829 100644
--- a/app/server-health/controllers/sensors-overview-controller.js
+++ b/app/server-health/controllers/sensors-overview-controller.js
@@ -9,7 +9,7 @@
 
 window.angular && (function (angular) {
     'use strict';
-
+    var sensorData = [], originalData = {};
     angular
         .module('app.overview')
         .controller('sensorsOverviewController', [
@@ -24,7 +24,101 @@
                 $scope.dropdown_selected = false;
 
                 $scope.$log = $log;
-                $scope.message = 'Hello World!';
+                $scope.customSearch = "";
+                $scope.searchTerms = [];
+                $scope.selectedSeverity = {
+                    all: true,
+                    normal: false,
+                    warning: false,
+                    critical: false
+                };
+                $scope.export_name = "sensors.json";
+                $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.doSearchOnEnter = function (event) {
+                    var search = $scope.customSearch.replace(/^\s+/g,'').replace(/\s+$/g,'');
+                    if (event.keyCode === 13 &&
+                        search.length >= 2) {
+                        $scope.searchTerms = $scope.customSearch.split(" ");
+                    }else{
+                        if(search.length == 0){
+                            $scope.searchTerms = [];
+                        }
+                    }
+                };
+
+                $scope.doSearchOnClick = function() {
+                    var search = $scope.customSearch.replace(/^\s+/g,'').replace(/\s+$/g,'');
+                    if (search.length >= 2) {
+                        $scope.searchTerms = $scope.customSearch.split(" ");
+                    }else{
+                        if(search.length == 0){
+                            $scope.searchTerms = [];
+                        }
+                    }
+                }
+
+                $scope.toggleSeverityAll = function(){
+                    $scope.selectedSeverity.all = !$scope.selectedSeverity.all;
+
+                    if($scope.selectedSeverity.all){
+                        $scope.selectedSeverity.normal = false;
+                        $scope.selectedSeverity.warning = false;
+                        $scope.selectedSeverity.critical = false;
+                    }
+                }
+
+                $scope.toggleSeverity = function(severity){
+                    $scope.selectedSeverity[severity] = !$scope.selectedSeverity[severity];
+
+                    if($scope.selectedSeverity.normal && 
+                       $scope.selectedSeverity.warning && 
+                       $scope.selectedSeverity.critical){
+                        $scope.selectedSeverity.all = true;
+                        $scope.selectedSeverity.normal = false;
+                        $scope.selectedSeverity.warning = false;
+                        $scope.selectedSeverity.critical = false;
+                    }else{
+                        $scope.selectedSeverity.all = false;
+                    }
+                }
+
+                $scope.filterBySeverity = function(sensor){
+                    if($scope.selectedSeverity.all) return true;
+
+                    return( (sensor.severity_flags.normal && $scope.selectedSeverity.normal) ||
+                            (sensor.severity_flags.warning && $scope.selectedSeverity.warning) ||
+                            (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++){
+                        if(sensor.search_text.indexOf($scope.searchTerms[i].toLowerCase()) == -1) return false;
+                    }
+                    return true;
+                }
+
+                $scope.loadSensorData = function(){
+                    APIUtils.getAllSensorStatus(function(data, originalData){
+                        sensorData = data;
+                        originalData = originalData;
+                        $scope.data = data;
+                        $scope.originalData = originalData;
+                        dataService.sensorData = sensorData;
+                        $scope.export_data = JSON.stringify(originalData);
+                    });
+                };
+
+                $scope.loadSensorData();
             }
         ]
     );
