diff --git a/app/configuration/controllers/firmware-controller.html b/app/configuration/controllers/firmware-controller.html
index 4d3e2a3..e79913b 100644
--- a/app/configuration/controllers/firmware-controller.html
+++ b/app/configuration/controllers/firmware-controller.html
@@ -120,7 +120,7 @@
 		<div class="modal__content">
 			<div ng-switch on="activate_image_type">
 				<p ng-switch-when="BMC">When you activate the BMC firmware file, {{activate_image_version}}, the BMC must be rebooted before it will operate with the new firmware code. Note that when you reboot the BMC, the BMC will be unavailable for several minutes and you must log in again.</p>
-				<p ng-switch-when="Host">When you activate server firmware file, {{activate_image_version}}, the new firmware will not operate until the next time the server boots.</p>
+				<p ng-switch-when="Host">When you activate the server firmware file, {{activate_image_version}}, the new firmware will not operate until the next time the server boots.</p>
 			</div>
 			<form ng-if="activate_image_type == 'BMC'">
 				<fieldset>
@@ -138,6 +138,22 @@
 					</div>
 				</fieldset>
 			</form>
+			<form ng-if="activate_image_type == 'Host'">
+				<fieldset>
+					<div class="row column">
+						<label class="control-radio bold" for="activate-host-without-reboot">Activate firmware file without {{isServerOff() ? "booting" : "rebooting"}} server
+							<input type="radio" name="activate-host-without-reboot" id="activate-host-without-reboot" ng-model="activate.reboot" ng-value="false"/>
+							<span class="control__indicator control__indicator-on"></span>
+						</label>
+					</div>
+					<div class="row column">
+						<label class="control-radio bold" for="activate-host-with-reboot">Activate firmware file and automatically {{isServerOff() ? "boot" : "reboot"}} server
+							<input type="radio" name="activate-host-with-reboot" id="activate-host-with-reboot" ng-model="activate.reboot" ng-value="true"/>
+							<span class="control__indicator control__indicator-on"></span>
+						</label>
+					</div>
+				</fieldset>
+			</form>
 		</div>
 		<div class="modal__button-wrapper">
 			<button class="inline btn-secondary" ng-click="activate_confirm=false;">Cancel</button>
diff --git a/app/configuration/controllers/firmware-controller.js b/app/configuration/controllers/firmware-controller.js
index 80f3806..04a7c78 100644
--- a/app/configuration/controllers/firmware-controller.js
+++ b/app/configuration/controllers/firmware-controller.js
@@ -11,10 +11,10 @@
 
   angular.module('app.configuration').controller('firmwareController', [
     '$scope', '$window', 'APIUtils', 'dataService', '$location',
-    '$anchorScroll', 'Constants', '$interval', '$q', '$timeout',
+    '$anchorScroll', 'Constants', '$interval', '$q', '$timeout', '$interpolate',
     function(
         $scope, $window, APIUtils, dataService, $location, $anchorScroll,
-        Constants, $interval, $q, $timeout) {
+        Constants, $interval, $q, $timeout, $interpolate) {
       $scope.dataService = dataService;
 
       // Scroll to target anchor
@@ -125,7 +125,6 @@
                         });
                       })
                   .then(function(state) {
-                    // Only look at reboot if it's a BMC image
                     if ($scope.activate.reboot &&
                         ($scope.activate_image_type == 'BMC')) {
                       // Despite the new image being active, issue,
@@ -151,10 +150,65 @@
                             });
                       }, 10000);
                     }
+                    if ($scope.activate.reboot &&
+                        ($scope.activate_image_type == 'Host')) {
+                      // If image type being activated is a host image, the
+                      // current power status of the server determines if the
+                      // server should power on or reboot.
+                      if ($scope.isServerOff()) {
+                        powerOn();
+                      } else {
+                        warmReboot();
+                      }
+                    }
                   });
             });
         $scope.activate_confirm = false;
       };
+      function powerOn() {
+        dataService.setUnreachableState();
+        APIUtils.hostPowerOn()
+            .then(function(response) {
+              return response;
+            })
+            .then(function(lastStatus) {
+              return APIUtils.pollHostStatusTillOn();
+            })
+            .catch(function(error) {
+              dataService.activateErrorModal({
+                title: Constants.MESSAGES.POWER_OP.POWER_ON_FAILED,
+                description: error.statusText ?
+                    $interpolate(
+                        Constants.MESSAGES.ERROR_MESSAGE_DESC_TEMPLATE)(
+                        {status: error.status, description: error.statusText}) :
+                    error
+              });
+            });
+      };
+      function warmReboot() {
+        $scope.uploading = true;
+        dataService.setUnreachableState();
+        APIUtils.hostReboot()
+            .then(function(response) {
+              return response;
+            })
+            .then(function(lastStatus) {
+              return APIUtils.pollHostStatusTilReboot();
+            })
+            .catch(function(error) {
+              dataService.activateErrorModal({
+                title: Constants.MESSAGES.POWER_OP.WARM_REBOOT_FAILED,
+                description: error.statusText ?
+                    $interpolate(
+                        Constants.MESSAGES.ERROR_MESSAGE_DESC_TEMPLATE)(
+                        {status: error.status, description: error.statusText}) :
+                    error
+              });
+            });
+      };
+      $scope.isServerOff = function() {
+        return dataService.server_state === Constants.HOST_STATE_TEXT.off;
+      };
 
       $scope.upload = function() {
         if ($scope.file) {
