diff --git a/src/header.html b/src/header.html
index 94beff5..2019c0e 100644
--- a/src/header.html
+++ b/src/header.html
@@ -10,8 +10,8 @@
     <div class="logo__wrapper"><img src="img/logo.svg" id="header__logo"  alt="company logo"/></div>
     <button id="header__server-name">{{dataService.server_id}}</button>
     <div class="header__functions">
-        <a href="" id="header__server-health">Server health<span class="status-light__good">{{dataService.server_health}}</span></a>
-        <a href="#/power-operations" class="header__server-power" role="button">Server power<span ng-class="{'status-light__error': server_status == -1, 'status-light__disabled': server_status == 0, 'status-light__good': server_status == 1}">{{dataService.server_state}}</span></a>
+        <a href="" id="header__server-health">Server health<span class="status-light__error">{{dataService.server_health}}</span></a>
+        <a href="#/power-operations" class="header__server-power" role="button">Server power<span ng-class="{'status-light__error': dataService.server_state == 'Off', 'status-light__disabled': dataService.server_state == 'Unreachable', 'status-light__good': dataService.server_state == 'Running', 'status-light__warn': dataService.server_state == 'Quiesced'}">{{dataService.server_state}}</span></a>
         <p class="header__refresh">Page last refreshed <span>{{dataService.last_updated |date:'h:mm:ss MMM dd yyyy'}}</span></p>
         <button class="header__page-refresh" ng-click="refresh()"><img src="img/icon-refresh-white.svg" alt="refresh page" role="button"/></button>
     </div>
diff --git a/src/js/controllers.js b/src/js/controllers.js
index 1b5df0f..1c2dd82 100644
--- a/src/js/controllers.js
+++ b/src/js/controllers.js
@@ -1,185 +1,158 @@
-angular
-    .module('app.controllers', [])
-    .controller('loginController', ['$scope', '$window', 'APIUtils', 'dataService', 'userModel', function ($scope, $window, APIUtils, dataService, userModel) {
-        $scope.dataService = dataService;
-
-        $scope.tryLogin = function (username, password, event) {
-            if (event.keyCode === 13) {
-                $scope.login(username, password);
-            }
-        };
-        $scope.login = function (username, password) {
-            $scope.error = false;
-            if (!username || username == "" || !password || password == "") {
-                return false;
-            } else {
-                if (userModel.login(username, password)) {
-                    $window.location.hash = '#/system-overview';
-                } else {
-                    $scope.error = true;
-                }
+ angular
+ .module('app.controllers', [])
+   .controller('loginController', ['$scope', '$window', 'APIUtils', 'dataService', 'userModel', function($scope, $window, APIUtils, dataService, userModel){
+    $scope.dataService = dataService;
+    
+    $scope.tryLogin = function(username, password, event){
+        if(event.keyCode === 13){
+            $scope.login(username, password);
+        }
+    }; 
+    $scope.login = function(username, password){
+        $scope.error = false;
+        if(!username || username == "" ||
+           !password || password == ""){
+            return false;
+        }else{
+            if(userModel.login(username, password)){
+                $window.location.hash = '#/system-overview';
+            }else{
+                $scope.error = true;
             }
         }
-    }])
-    .controller('dashboardController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-    }])
-    .controller('systemOverviewController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-    }])
-    .controller('unitIDController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-    }])
-    .controller('bmcRebootController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-        $scope.bmcReboot_confirm = false;
+    }
+ }])
+ .controller('dashboardController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+ .controller('systemOverviewController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+ .controller('unitIDController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+ .controller('bmcRebootController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+  .controller('powerOperationsController', ['$scope', 'APIUtils', 'dataService', '$timeout', function($scope, APIUtils, dataService, $timeout){
+    $scope.dataService = dataService;
+    $scope.confirm = false;
+    $scope.power_confirm = false;
+    $scope.warmboot_confirm = false;
+    $scope.coldboot_confirm = false;
+    $scope.orderly_confirm = false;
+    $scope.immediately_confirm = false;
 
-        // BMC reboot
-        $scope.bmcReboot = function () {
-            //@TODO:show progress
-            APIUtils.bmcReboot(function (response) {
-                if (response) {
-                    //@TODO: set proper server state
-                } else {
-                    //@TODO:show error message
+    //@TODO: call api and get proper state
+    $scope.toggleState = function(){
+        dataService.server_state = (dataService.server_state == 'Running') ? 'Off': 'Running';
+    }
+
+    $scope.togglePower = function(){
+        var method = (dataService.server_state == 'Running') ? 'hostPowerOff' : 'hostPowerOn';
+         //@TODO: show progress or set class orange
+        APIUtils[method](function(response){
+            //update state based on response
+            //error case?
+            if(response == null){
+                console.log("Failed request.");
+            }else{
+                //@TODO::need to get the server status
+                if(dataService.server_state == 'Running'){
+                    dataService.setPowerOffState();
+                }else{
+                    dataService.setPowerOnState();
                 }
-                //@TODO:hide progress
-            });
-        };
-        $scope.bmcRebootConfirm = function () {
-            if ($scope.confirm) {
-                return;
             }
-            $scope.confirm = true;
-            $scope.bmcReboot_confirm = true;
-        };
-    }])
-    .controller('powerOperationsController', ['$scope', 'APIUtils', 'dataService', function ($scope, APIUtils, dataService) {
-        $scope.dataService = dataService;
-        $scope.confirm = false;
-        $scope.power_confirm = false;
-        $scope.warmboot_confirm = false;
-        $scope.coldboot_confirm = false;
-        $scope.orderly_confirm = false;
-        $scope.immediately_confirm = false;
-
-        //@TODO: call api and get proper state
-        $scope.toggleState = function () {
-            dataService.server_state = (dataService.server_state == 'On') ? 'Off' : 'On';
-        };
-
-        $scope.togglePower = function () {
-            var method = (dataService.server_state == 'On') ? 'chassisPowerOff' : 'chassisPowerOn';
-            //@TODO: show progress or set class orange
-            APIUtils[method](function (response) {
-                //update state based on response
-                //error case?
-                if (response == null) {
-                    console.log("Failed request.");
-                } else {
-                    dataService.server_state = response;
-                }
-            });
+        });
+    }
+    $scope.powerOnConfirm = function(){
+        if($scope.confirm) {
+            return;
         }
-        $scope.powerOnConfirm = function () {
-            if ($scope.confirm) {
-                return;
+        $scope.confirm = true;
+        $scope.power_confirm = true;
+    };
+    $scope.warmReboot = function(){
+        //@TODO:show progress
+        dataService.loading = true;
+        APIUtils.hostPowerOff(function(response){
+            if(response){
+                dataService.setPowerOffState();
+                APIUtils.hostPowerOn(function(response){
+                    if(response){
+                        dataService.setPowerOnState();
+                    }else{
+                        //@TODO:show error message
+                    }
+                    //@TODO:hide progress, set proper server state
+                    dataService.loading = false;
+                });
+            }else{
+                //@TODO:hide progress & show error message
+                dataService.loading = false;
             }
-            $scope.confirm = true;
-            $scope.power_confirm = true;
-        };
-        $scope.warmReboot = function () {
-            //@TODO:show progress
-            APIUtils.hostPowerOff(function (response) {
-                if (response) {
-                    APIUtils.hostPowerOn(function (response) {
-                        if (response) {
+        });
+    };
+    $scope.testState = function(){
+        //@TODO:show progress
+        dataService.loading = true;
 
-                        } else {
-                            //@TODO:show error message
-                        }
-                        //@TODO:hide progress, set proper server state
-                    });
-                } else {
-                    //@TODO:hide progress & show error message
-                }
-            });
-        };
-        $scope.warmRebootConfirm = function () {
-            if ($scope.confirm) {
-                return;
+        $timeout(function(){
+            dataService.setPowerOffState();
+            $timeout(function(){
+                dataService.setPowerOnState();
+                dataService.loading = false;
+            }, 2000);
+        }, 1000);
+    };
+    $scope.warmRebootConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.warmboot_confirm = true;
+    };
+
+    $scope.coldReboot = function(){
+        $scope.warmReboot();
+    };
+    $scope.coldRebootConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.coldboot_confirm = true;
+    };
+
+    $scope.orderlyShutdown = function(){
+        //@TODO:show progress
+        dataService.loading = true;
+        APIUtils.hostPowerOff(function(response){
+            if(response){
+                dataService.setPowerOffState();
+            }else{
+                //@TODO:hide progress & show error message
             }
-            $scope.confirm = true;
-            $scope.warmboot_confirm = true;
-        };
+            dataService.loading = false;
+        });
+    };
+    $scope.orderlyShutdownConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.orderly_confirm = true;
+    };
 
-        $scope.coldReboot = function () {
-            //@TODO:show progress
-            APIUtils.chassisPowerOff(function (response) {
-                if (response) {
-                    APIUtils.chassisPowerOn(function (response) {
-                        if (response) {
-
-                        } else {
-                            //@TODO:show error message
-                        }
-                        //@TODO:hide progress, set proper server state
-                    });
-                } else {
-                    //@TODO:hide progress & show error message
-                }
-            });
-        };
-        $scope.coldRebootConfirm = function () {
-            if ($scope.confirm) {
-                return;
-            }
-            $scope.confirm = true;
-            $scope.coldboot_confirm = true;
-        };
-
-        $scope.orderlyShutdown = function () {
-            //@TODO:show progress
-            APIUtils.hostPowerOff(function (response) {
-                if (response) {
-                    APIUtils.chassisPowerOff(function (response) {
-                        if (response) {
-
-                        } else {
-                            //@TODO:show error message
-                        }
-                        //@TODO:hide progress, set proper server state
-                    });
-                } else {
-                    //@TODO:hide progress & show error message
-                }
-            });
-        };
-        $scope.orderlyShutdownConfirm = function () {
-            if ($scope.confirm) {
-                return;
-            }
-            $scope.confirm = true;
-            $scope.orderly_confirm = true;
-        };
-
-        $scope.immediateShutdown = function () {
-            //@TODO:show progress
-            APIUtils.chassisPowerOff(function (response) {
-                if (response) {
-                    //@TODO: set proper server state
-                } else {
-                    //@TODO:show error message
-                }
-                //@TODO:hide progress
-            });
-        };
-        $scope.immediateShutdownConfirm = function () {
-            if ($scope.confirm) {
-                return;
-            }
-            $scope.confirm = true;
-            $scope.immediately_confirm = true;
-        };
-
-    }]);
+    $scope.immediateShutdown = function(){
+        $scope.orderlyShutdown();
+    };
+    $scope.immediateShutdownConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.immediately_confirm = true;
+    };
+ }]);
diff --git a/src/js/directives.js b/src/js/directives.js
index 79224f0..913d686 100644
--- a/src/js/directives.js
+++ b/src/js/directives.js
@@ -13,17 +13,23 @@
         'controller': ['$scope','dataService', 'userModel', '$location', function($scope, dataService, userModel, $location){
             $scope.server_status = 01;
             $scope.dataService = dataService;
-            APIUtils.login(function(){
-                APIUtils.getHostState(function(status){
-                    if(status == 'xyz.openbmc_project.State.Host.HostState.Off'){
-                        $scope.server_status = -1;
-                    }else if(status == 'xyz.openbmc_project.State.Host.HostState.Running'){
-                        $scope.server_status = 1;
-                    }else{
-                        $scope.server_status = 0;
-                    }
+
+            $scope.loadServerStatus = function(){
+                $scope.dataService.loading = true;
+                APIUtils.login(function(){
+                    APIUtils.getHostState(function(status){
+                        if(status == 'xyz.openbmc_project.State.Host.HostState.Off'){
+                            dataService.setPowerOffState();
+                        }else if(status == 'xyz.openbmc_project.State.Host.HostState.Running'){
+                            dataService.setPowerOnState();
+                        }else{
+                            dataService.setBootingState();
+                        }
+                        dataService.loading = false;
+                    });
                 });
-            });
+            }
+            $scope.loadServerStatus();
 
             $scope.logout = function(){
                 userModel.logout();
@@ -31,7 +37,7 @@
             };
 
             $scope.refresh = function(){
-                console.log("--refresh status--");
+                $scope.loadServerStatus();
             }
         }]
     };
diff --git a/src/js/services.js b/src/js/services.js
index db44ae9..dbf8dc4 100644
--- a/src/js/services.js
+++ b/src/js/services.js
@@ -10,24 +10,46 @@
 **/
 angular
  .module('app.services', [])
- .service('dataService', function(){
+ .service('dataService', ['APIUtils', function(APIUtils){
     this.app_version = "openBMC V.0.0.1";
-    this.server_health = 'Good';
-    this.server_state = 'On';
+    this.server_health = 'Error';
+    this.server_state = 'Unreachable';
+    this.server_status = -2;
     this.chassis_state = 'On';
-    this.server_id = "Server BLZ_109284.209.01";
+    this.server_id = "Server 9.3.164.147";
     this.last_updated = new Date();
-
+    
+    this.loading = false;
+    this.loading_message = "";
     this.showNavigation = false;
     this.bodyStyle = {};
     this.path = '';
 
- })
+    this.setPowerOnState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.on;
+        this.server_status = APIUtils.HOST_STATE.on;
+    },
+
+    this.setPowerOffState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.off;
+        this.server_status = APIUtils.HOST_STATE.off;
+    },
+
+    this.setBootingState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.booting;
+        this.server_status = APIUtils.HOST_STATE.booting;
+    },
+
+    this.setUnreachableState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.unreachable;
+        this.server_status = APIUtils.HOST_STATE.unreachable;
+    }
+ }])
  .factory('APIUtils', ['$http', function($http){
     var SERVICE = {
         LOGIN_CREDENTIALS: {
-            username: "test",
-            password: "testpass",
+            username: "root",
+            password: "0penBmc",
         },
         API_CREDENTIALS: {
             user: 'root',
@@ -38,10 +60,17 @@
             on: 'On',
             off: 'Off'
         },
-        HOST_STATE: {
+        HOST_STATE_TEXT: {
             on: 'Running',
             off: 'Off',
-            booting: 'Quiesced'
+            booting: 'Quiesced',
+            unreachable: 'Unreachable'
+        },
+        HOST_STATE: {
+            on: 1,
+            off: -1,
+            booting: 0,
+            unreachable: -2
         },
         getChassisState: function(callback){
           $http({
@@ -144,20 +173,26 @@
           });
         },
         hostPowerOn: function(callback){
+          /**
+          curl -c cjar -b cjar -k -H "Content-Type: application/json" -d 
+          "{\"data\": \"xyz.openbmc_project.State.Host.Transition.Off\"}" 
+          -X PUT  
+          https://9.3.164.147/xyz/openbmc_project/state/host0/attr/RequestedHostTransition 
+          **/
           $http({
-            method: 'POST',
-            url: SERVICE.API_CREDENTIALS.host + "xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
+            method: 'PUT',
+            url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json'
             },
             withCredentials: true,
-            data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
+            data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
           }).success(function(response){
                 var json = JSON.stringify(response);
                 var content = JSON.parse(json);
                 if(callback){
-                    return callback(content.data.CurrentHostState);
+                    return callback(content.status);
                 }
           }).error(function(error){
             if(callback){
@@ -169,19 +204,19 @@
         },
         hostPowerOff: function(callback){
           $http({
-            method: 'POST',
-            url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
+            method: 'PUT',
+            url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json'
             },
             withCredentials: true,
-            data: JSON.stringify({"data": []}),
+            data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
           }).success(function(response){
                 var json = JSON.stringify(response);
                 var content = JSON.parse(json);
                 if(callback){
-                    return callback(content.data.CurrentHostState);
+                    return callback(content.status);
                 }
           }).error(function(error){
             if(callback){
diff --git a/src/login.html b/src/login.html
index bad16f7..3525a61 100644
--- a/src/login.html
+++ b/src/login.html
@@ -10,12 +10,11 @@
         <div class="columns large-6 login__desc">
             <h1>OpenBMC Advanced System Management</h1>
             <ul class="login__server-info">
-                <li><p class="login__info-label">Build version</p><p>1.00.102</p></li>
-                <li><p class="login__info-label">Server ID</p><p>29000000166668</p></li>
-                <li><p class="login__info-label">Server model</p><p>Power SL-22LC</p></li>
-Add a comment to this line
+                <li><p class="login__info-label">Build version</p><p>X.XX.XXX</p></li>
+                <li><p class="login__info-label">Server ID</p><p>XXXXXXXXXXXXXXXX</p></li>
+                <li><p class="login__info-label">Server model</p><p>Power XX-XXXXX</p></li>
                 <!-- ping server to see if powered on. Change status-light and txt accordingly. Status message is planned to be hardcoded message were isplay via local JS.  -->
-                <li><p class="login__info-label">Server power</p><p class="status-light__good">On</p></li>
+                <li><p class="login__info-label">Server power</p><p class="status-light__disabled">Indeterminate</p></li>
                 <li><p class="login__info-label">Status message</p><!--<p>BMC was reset by user</p>--></li>
             </ul>
         </div>
diff --git a/src/power-operations.html b/src/power-operations.html
index a692ca5..adcdd0e 100644
--- a/src/power-operations.html
+++ b/src/power-operations.html
@@ -12,7 +12,7 @@
         </div>
     </div>
     <div class="row column">
-        <div id="power-indicator-bar" class="power__indicator-bar " ng-class="{'power__state-on': dataService.server_state == 'On', 'power__state-off': dataService.server_state == 'Off', 'power__state-indet' : dataService.server_state == 'Booting' }">
+        <div id="power-indicator-bar" class="power__indicator-bar" ng-class="{'power__state-on': dataService.server_state == 'Running', 'power__state-off': dataService.server_state == 'Off', 'power__state-indet': dataService.server_state == 'Quiesced'}">
             <p class="inline">{{dataService.server_id}}</p>
             <h3 class="power__state inline float-right h3"><span>{{dataService.server_state}}</span></h3>
         </div>
@@ -23,33 +23,33 @@
         </div>
 
         <!-- Power on displays only when server is shutdown -->
-        <div class="row column power-option" ng-hide="dataService.server_state == 'On'" ng-class="{disabled: confirm && !power_confirm, transitionAll: confirm && power_confirm}">
-            <button id="power__power-on" class="btn-secondary" ng-click="powerOnConfirm()" role="button"><img src="img/icon-power.svg" />Power On</button>
+        <div class="row column power-option" ng-hide="dataService.server_state == 'Running'" ng-class="{disabled: (confirm && !power_confirm) || dataService.loading, transitionAll: confirm && power_confirm}">
+            <button id="power__power-on" class="btn-secondary" ng-click="togglePower()" role="button">Power On</button>
             <p>Attempts to power on the server</p>
 
-            <confirm title="power on" message="Power on the server" confirm="power_confirm" callback="togglePower"></confirm>
+            <!---<confirm title="power off" message="Power off the server" confirm="power_confirm" ng-show="power_confirm" callback="togglePower"></confirm>-->
         </div>
 
         <!-- Power reboot/shutdown options : when server is off all of these are hidden. When one option is selected, the others are disabled. -->
-        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: confirm && !warmboot_confirm, transitionAll: confirm && warmboot_confirm}">
+        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: (confirm && !warmboot_confirm) || dataService.loading, transitionAll: confirm && warmboot_confirm}">
             <button id="power__warm-boot" class="btn-secondary" ng-click="warmRebootConfirm()" role="button"><i>&#x21BB</i> Warm reboot</button>
             <p>Attempts to perform an orderly shutdown before restarting the server</p>
-            <confirm title="Warm Reboot" message="perform an orderly shutdown" confirm="warmboot_confirm" callback="warmReboot"></confirm>
+            <confirm title="Warm Reboot" message="perform an orderly shutdown" confirm="warmboot_confirm" ng-show="warmboot_confirm" callback="warmReboot"></confirm>
         </div>
-        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: confirm && !coldboot_confirm, transitionAll: confirm && coldboot_confirm}">
+        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: (confirm && !coldboot_confirm) || dataService.loading, transitionAll: confirm && coldboot_confirm}">
             <button id="power__cold-boot" class="btn-secondary" ng-click="coldRebootConfirm()" role="button"><i>&#x21BB</i> Cold reboot</button>
             <p>Shuts down the server immediately, then restarts it</p>
-            <confirm title="Cold Reboot" message="Shutdown server immediately." confirm="coldboot_confirm" cancel="coldbootCancel" callback="toggleState"></confirm>
+            <confirm title="Cold Reboot" message="Shutdown server immediately." confirm="coldboot_confirm" ng-show="coldboot_confirm" cancel="coldbootCancel" callback="coldReboot"></confirm>
         </div>
-        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: confirm && !orderly_confirm, transitionAll: confirm && orderly_confirm}">
+        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: (confirm && !orderly_confirm) || dataService.loading, transitionAll: confirm && orderly_confirm}">
             <button id="power__soft-shutdown" class="btn-secondary" ng-click="orderlyShutdownConfirm()" role="button"><img src="img/icon-power.svg" />Orderly shutdown</button>
             <p>Attempts to stop all software on the server before removing power</p>
-            <confirm title="Orderly shutdown" message="Attempts to stop all software orderly." confirm="orderly_confirm" cancel="orderlyShutdownCancel" callback="toggleState"></confirm>
+            <confirm title="Orderly shutdown" message="Attempts to stop all software orderly." confirm="orderly_confirm" ng-show="orderly_confirm" cancel="orderlyShutdownCancel" callback="orderlyShutdown"></confirm>
         </div>
-        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: confirm && !immediately_confirm, transitionAll: confirm && immediately_confirm}">
+        <div class="row column power-option" ng-hide="dataService.server_state == 'Off'" ng-class="{disabled: (confirm && !immediately_confirm) || dataService.loading, transitionAll: confirm && immediately_confirm}">
             <button id="power__hard-shutdown" class="btn-secondary" ng-click="immediateShutdownConfirm()" role="button"><img src="img/icon-power.svg" />Immediate shutdown</button>
             <p>Removes power from the server without waiting for software to stop</p>
-            <confirm title="Immediate shutdown" message="Removes power from the server immediately." confirm="immediately_confirm" cancel="immediatelyShutdownCancel" callback="toggleState"></confirm>
+            <confirm title="Immediate shutdown" message="Removes power from the server immediately." confirm="immediately_confirm" ng-show="immediately_confirm" cancel="immediatelyShutdownCancel" callback="immediateShutdown"></confirm>
         </div>
     </div>
 </div>
\ No newline at end of file
