diff --git a/app/overview/controllers/system-overview-controller.js b/app/overview/controllers/system-overview-controller.js
index 45ac8ae..c37765c 100644
--- a/app/overview/controllers/system-overview-controller.js
+++ b/app/overview/controllers/system-overview-controller.js
@@ -6,142 +6,142 @@
  * @name systemOverviewController
  */
 
-window.angular && (function (angular) {
-    'use strict';
+window.angular && (function(angular) {
+  'use strict';
 
-    angular
-        .module('app.overview')
-        .controller('systemOverviewController', [
-            '$scope',
-            '$window',
-            'APIUtils',
-            'dataService',
-            '$q',
-            function($scope, $window, APIUtils, dataService, $q){
-                $scope.dataService = dataService;
-                $scope.dropdown_selected = false;
-                $scope.tmz = 'EDT';
-                $scope.logs = [];
-                $scope.server_info = {};
-                $scope.bmc_firmware = "";
-                $scope.bmc_time = "";
-                $scope.server_firmware = "";
-                $scope.power_consumption = "";
-                $scope.power_cap = "";
-                $scope.bmc_ip_addresses = [];
-                $scope.loading = false;
-                $scope.edit_hostname = false;
+  angular
+    .module('app.overview')
+    .controller('systemOverviewController', [
+      '$scope',
+      '$window',
+      'APIUtils',
+      'dataService',
+      '$q',
+      function($scope, $window, APIUtils, dataService, $q) {
+        $scope.dataService = dataService;
+        $scope.dropdown_selected = false;
+        $scope.tmz = 'EDT';
+        $scope.logs = [];
+        $scope.server_info = {};
+        $scope.bmc_firmware = '';
+        $scope.bmc_time = '';
+        $scope.server_firmware = '';
+        $scope.power_consumption = '';
+        $scope.power_cap = '';
+        $scope.bmc_ip_addresses = [];
+        $scope.loading = false;
+        $scope.edit_hostname = false;
 
-                loadOverviewData();
-                function loadOverviewData(){
-                    $scope.loading = true;
+        loadOverviewData();
 
-                    var getLogsPromise =
-                        APIUtils.getLogs().then(function(data){
-                            $scope.logs = data.data.filter(function(log){
-                                return log.severity_flags.high == true;
-                            });
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+        function loadOverviewData() {
+          $scope.loading = true;
 
-                    var getFirmwaresPromise =
-                        APIUtils.getFirmwares().then(function(data){
-                            $scope.bmc_firmware = data.bmcActiveVersion;
-                            $scope.server_firmware = data.hostActiveVersion;
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getLogsPromise =
+            APIUtils.getLogs().then(function(data) {
+              $scope.logs = data.data.filter(function(log) {
+                return log.severity_flags.high == true;
+              });
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var getLEDStatePromise =
-                        APIUtils.getLEDState().then(function(data){
-                            if(data == APIUtils.LED_STATE.on){
-                                dataService.LED_state = APIUtils.LED_STATE_TEXT.on;
-                            }else{
-                                dataService.LED_state = APIUtils.LED_STATE_TEXT.off;
-                            }
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getFirmwaresPromise =
+            APIUtils.getFirmwares().then(function(data) {
+              $scope.bmc_firmware = data.bmcActiveVersion;
+              $scope.server_firmware = data.hostActiveVersion;
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var getBMCTimePromise =
-                        APIUtils.getBMCTime().then(function(data){
-                            $scope.bmc_time = data.data.Elapsed / 1000;
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getLEDStatePromise =
+            APIUtils.getLEDState().then(function(data) {
+              if (data == APIUtils.LED_STATE.on) {
+                dataService.LED_state = APIUtils.LED_STATE_TEXT.on;
+              }
+              else {
+                dataService.LED_state = APIUtils.LED_STATE_TEXT.off;
+              }
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var getServerInfoPromise =
-                        APIUtils.getServerInfo().then(function(data){
-                            $scope.server_info = data.data;
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getBMCTimePromise =
+            APIUtils.getBMCTime().then(function(data) {
+              $scope.bmc_time = data.data.Elapsed / 1000;
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var getPowerConsumptionPromise =
-                        APIUtils.getPowerConsumption().then(function(data){
-                            $scope.power_consumption = data;
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getServerInfoPromise =
+            APIUtils.getServerInfo().then(function(data) {
+              $scope.server_info = data.data;
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var getPowerCapPromise =
-                        APIUtils.getPowerCap().then(function(data){
-                            $scope.power_cap = data;
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getPowerConsumptionPromise =
+            APIUtils.getPowerConsumption().then(function(data) {
+              $scope.power_consumption = data;
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var getNetworkInfoPromise =
-                        APIUtils.getNetworkInfo().then(function(data){
-                            // TODO: openbmc/openbmc#3150 Support IPV6 when
-                            // officially supported by the backend
-                            $scope.bmc_ip_addresses =
-                                data.formatted_data.ip_addresses.ipv4;
-                        }, function(error){
-                            console.log(JSON.stringify(error));
-                        })
+          var getPowerCapPromise =
+            APIUtils.getPowerCap().then(function(data) {
+              $scope.power_cap = data;
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    var promises = [
-                        getLogsPromise,
-                        getFirmwaresPromise,
-                        getLEDStatePromise,
-                        getBMCTimePromise,
-                        getServerInfoPromise,
-                        getPowerConsumptionPromise,
-                        getPowerCapPromise,
-                        getNetworkInfoPromise,
-                    ];
+          var getNetworkInfoPromise =
+            APIUtils.getNetworkInfo().then(function(data) {
+              // TODO: openbmc/openbmc#3150 Support IPV6 when
+              // officially supported by the backend
+              $scope.bmc_ip_addresses =
+                data.formatted_data.ip_addresses.ipv4;
+            }, function(error) {
+              console.log(JSON.stringify(error));
+            });
 
-                    $q.all(promises).finally(function(){
-                        $scope.loading = false;
-                    });
-                }
+          var promises = [
+            getLogsPromise,
+            getFirmwaresPromise,
+            getLEDStatePromise,
+            getBMCTimePromise,
+            getServerInfoPromise,
+            getPowerConsumptionPromise,
+            getPowerCapPromise,
+            getNetworkInfoPromise,
+          ];
 
-                $scope.toggleLED = function(){
-                    var toggleState = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
-                        APIUtils.LED_STATE.off : APIUtils.LED_STATE.on;
-                        dataService.LED_state = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
-                        APIUtils.LED_STATE_TEXT.off : APIUtils.LED_STATE_TEXT.on;
-                    APIUtils.setLEDState(toggleState, function(status){
-                    });
-                }
+          $q.all(promises).finally(function() {
+            $scope.loading = false;
+          });
+        }
 
-                $scope.saveHostname = function(hostname) {
-                    $scope.edit_hostname = false;
-                    $scope.loading = true;
-                    APIUtils.setHostname(hostname).then(function(data){
-                        APIUtils.getNetworkInfo().then(function(data){
-                            dataService.setNetworkInfo(data);
-                        });
-                    },
-                    function(error){
-                        console.log(error);
-                    });
-                    $scope.loading = false;
-                }
-            }
-        ]
-    );
+        $scope.toggleLED = function() {
+          var toggleState = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
+            APIUtils.LED_STATE.off : APIUtils.LED_STATE.on;
+          dataService.LED_state = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
+            APIUtils.LED_STATE_TEXT.off : APIUtils.LED_STATE_TEXT.on;
+          APIUtils.setLEDState(toggleState, function(status) {});
+        };
+
+        $scope.saveHostname = function(hostname) {
+          $scope.edit_hostname = false;
+          $scope.loading = true;
+          APIUtils.setHostname(hostname).then(function(data) {
+              APIUtils.getNetworkInfo().then(function(data) {
+                dataService.setNetworkInfo(data);
+              });
+            },
+            function(error) {
+              console.log(error);
+            });
+          $scope.loading = false;
+        };
+      }
+    ]);
 
 })(angular);
diff --git a/app/overview/index.js b/app/overview/index.js
index 3a07ed8..aa3f023 100644
--- a/app/overview/index.js
+++ b/app/overview/index.js
@@ -5,28 +5,28 @@
  * @exports app/overview/index
  */
 
-window.angular && (function (angular) {
-    'use strict';
+window.angular && (function(angular) {
+  'use strict';
 
-    angular
-        .module('app.overview', [
-            'ngRoute',
-            'app.constants',
-            'app.common.services'
-        ])
-        // Route configuration
-        .config(['$routeProvider', function ($routeProvider) {
-            $routeProvider
-                .when('/overview/server', {
-                    'template': require('./controllers/system-overview-controller.html'),
-                    'controller': 'systemOverviewController',
-                    authenticated: true
-                })
-                .when('/overview', {
-                    'template': require('./controllers/system-overview-controller.html'),
-                    'controller': 'systemOverviewController',
-                    authenticated: true
-                });
-        }]);
+  angular
+    .module('app.overview', [
+      'ngRoute',
+      'app.constants',
+      'app.common.services'
+    ])
+    // Route configuration
+    .config(['$routeProvider', function($routeProvider) {
+      $routeProvider
+        .when('/overview/server', {
+          'template': require('./controllers/system-overview-controller.html'),
+          'controller': 'systemOverviewController',
+          authenticated: true
+        })
+        .when('/overview', {
+          'template': require('./controllers/system-overview-controller.html'),
+          'controller': 'systemOverviewController',
+          authenticated: true
+        });
+    }]);
 
 })(window.angular);
