diff --git a/app/common/services/api-utils.js b/app/common/services/api-utils.js
index 6f81ce1..13f1406 100644
--- a/app/common/services/api-utils.js
+++ b/app/common/services/api-utils.js
@@ -1096,7 +1096,7 @@
                   if ('Not Found' == error.statusText) {
                     return Constants.POWER_CONSUMPTION_TEXT.notavailable;
                   } else {
-                    console.log(error);
+                    throw error;
                   }
                 });
               },
@@ -1116,8 +1116,6 @@
                     return (false == content.data.PowerCapEnable) ?
                         Constants.POWER_CAP_TEXT.disabled :
                         content.data.PowerCap + ' ' + Constants.POWER_CAP_TEXT.unit;
-                }, function(error){
-                  console.log(error);
                 });
               },
               setHostname: function(hostname){
diff --git a/app/overview/controllers/system-overview-controller.js b/app/overview/controllers/system-overview-controller.js
index 5ce57dc..2f37c01 100644
--- a/app/overview/controllers/system-overview-controller.js
+++ b/app/overview/controllers/system-overview-controller.js
@@ -22,8 +22,6 @@
                 $scope.dropdown_selected = false;
                 $scope.tmz = 'EDT';
                 $scope.logs = [];
-                $scope.mac_address = "";
-                $scope.bmc_info = {};
                 $scope.server_info = {};
                 $scope.bmc_firmware = "";
                 $scope.bmc_time = "";
@@ -37,72 +35,89 @@
                 loadOverviewData();
                 function loadOverviewData(){
                     $scope.loading = true;
-                    var promises = {
-                      logs: APIUtils.getLogs(),
-                      firmware: APIUtils.getFirmwares(),
-                      led: APIUtils.getLEDState(),
-                      ethernet: APIUtils.getBMCEthernetInfo(),
-                      bmc_info: APIUtils.getBMCInfo(),
-                      bmc_time: APIUtils.getBMCTime(),
-                      server_info: APIUtils.getServerInfo(),
-                      power_consumption: APIUtils.getPowerConsumption(),
-                      power_cap: APIUtils.getPowerCap(),
-                      network_info: APIUtils.getNetworkInfo(),
-                    };
-                    $q.all(promises)
-                      .then(function(data){
-                        $scope.displayLogs(data.logs.data);
-                        $scope.displayServerInfo(
-                            data.server_info,
-                            data.firmware.hostActiveVersion
-                        );
-                        $scope.displayLEDState(data.led);
-                        $scope.displayBMCEthernetInfo(data.ethernet);
-                        $scope.displayBMCInfo(
-                            data.bmc_info,
-                            data.firmware.bmcActiveVersion
-                        );
-                        $scope.displayBMCTime(data.bmc_time);
-                        $scope.displayPowerConsumption(data.power_consumption);
-                        $scope.displayPowerCap(data.power_cap);
-                        $scope.displayNetworkInfo(data.network_info);
-                      })
-                      .finally(function(){
+
+                    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 getFirmwaresPromise =
+                        APIUtils.getFirmwares().then(function(data){
+                            $scope.bmc_firmware = data.bmcActiveVersion;
+                            $scope.server_firmware = data.hostActiveVersion;
+                        }, 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 getBMCTimePromise =
+                        APIUtils.getBMCTime().then(function(data){
+                            $scope.bmc_time = data.data.Elapsed / 1000;
+                        }, 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 getPowerConsumptionPromise =
+                        APIUtils.getPowerConsumption().then(function(data){
+                            $scope.power_consumption = 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 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 promises = [
+                        getLogsPromise,
+                        getFirmwaresPromise,
+                        getLEDStatePromise,
+                        getBMCTimePromise,
+                        getServerInfoPromise,
+                        getPowerConsumptionPromise,
+                        getPowerCapPromise,
+                        getNetworkInfoPromise,
+                    ];
+
+                    $q.all(promises).finally(function(){
                         $scope.loading = false;
-                      });
-                }
-                $scope.displayBMCEthernetInfo = function(data){
-                    $scope.mac_address = data.MACAddress;
-                }
-
-                $scope.displayBMCInfo = function(data, bmcActiveVersion){
-                    $scope.bmc_info = data;
-                    $scope.bmc_firmware = bmcActiveVersion;
-                }
-
-                $scope.displayBMCTime = function(data){
-                    $scope.bmc_time = data.data.Elapsed / 1000;
-                }
-
-                $scope.displayLogs = function(data){
-                    $scope.logs = data.filter(function(log){
-                        return log.severity_flags.high == true;
                     });
                 }
 
-                $scope.displayServerInfo = function(data, hostActiveVersion){
-                    $scope.server_info = data.data;
-                    $scope.server_firmware = hostActiveVersion;
-                }
-
-                $scope.displayLEDState = function(state){
-                    if(state == APIUtils.LED_STATE.on){
-                        dataService.LED_state = APIUtils.LED_STATE_TEXT.on;
-                    }else{
-                        dataService.LED_state = APIUtils.LED_STATE_TEXT.off;
-                    }
-                }
-
                 $scope.toggleLED = function(){
                     var toggleState = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
                         APIUtils.LED_STATE.off : APIUtils.LED_STATE.on;
@@ -112,21 +127,6 @@
                     });
                 }
 
-                $scope.displayPowerConsumption = function(data){
-                    $scope.power_consumption = data;
-                }
-
-                $scope.displayPowerCap = function(data){
-                    $scope.power_cap = data;
-                }
-
-                $scope.displayNetworkInfo = function(data){
-                    // TODO: openbmc/openbmc#3150 Support IPV6 when officially
-                    // supported by the backend
-                    $scope.bmc_ip_addresses =
-                        data.formatted_data.ip_addresses.ipv4;
-                }
-
                 $scope.saveHostname = function(hostname) {
                     $scope.edit_server_name = false;
                     $scope.loading = true;
