diff --git a/src/views/Configuration/Firmware/Firmware.vue b/src/views/Configuration/Firmware/Firmware.vue
index e27c8a2..a2acb9b 100644
--- a/src/views/Configuration/Firmware/Firmware.vue
+++ b/src/views/Configuration/Firmware/Firmware.vue
@@ -3,7 +3,7 @@
     <page-title />
     <alerts-server-power
       v-if="isServerPowerOffRequired"
-      :is-host-off="isHostOff"
+      :is-server-off="isServerOff"
     />
 
     <!-- Firmware cards -->
@@ -25,7 +25,7 @@
         <b-col sm="8" md="6" xl="4">
           <!-- Update form -->
           <form-update
-            :is-host-off="isHostOff"
+            :is-server-off="isServerOff"
             :is-page-disabled="isPageDisabled"
           />
         </b-col>
@@ -67,18 +67,18 @@
     };
   },
   computed: {
-    hostStatus() {
-      return this.$store.getters['global/hostStatus'];
+    serverStatus() {
+      return this.$store.getters['global/serverStatus'];
     },
-    isHostOff() {
-      return this.hostStatus === 'off' ? true : false;
+    isServerOff() {
+      return this.serverStatus === 'off' ? true : false;
     },
     isSingleFileUploadEnabled() {
       return this.$store.getters['firmware/isSingleFileUploadEnabled'];
     },
     isPageDisabled() {
       if (this.isServerPowerOffRequired) {
-        return !this.isHostOff || this.loading || this.isOperationInProgress;
+        return !this.isServerOff || this.loading || this.isOperationInProgress;
       }
       return this.loading || this.isOperationInProgress;
     },
diff --git a/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue b/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue
index 0471311..2a3bcba 100644
--- a/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue
+++ b/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue
@@ -8,7 +8,7 @@
         </p>
       </alert>
       <!-- Power off server warning alert -->
-      <alert v-else-if="!isHostOff" variant="warning" class="mb-5">
+      <alert v-else-if="!isServerOff" variant="warning" class="mb-5">
         <p class="mb-0">
           {{ $t('pageFirmware.alert.serverMustBePoweredOffTo') }}
         </p>
@@ -36,7 +36,7 @@
 export default {
   components: { Alert },
   props: {
-    isHostOff: {
+    isServerOff: {
       required: true,
       type: Boolean,
     },
diff --git a/src/views/Configuration/Firmware/FirmwareFormUpdate.vue b/src/views/Configuration/Firmware/FirmwareFormUpdate.vue
index 9f67e8d..702352f 100644
--- a/src/views/Configuration/Firmware/FirmwareFormUpdate.vue
+++ b/src/views/Configuration/Firmware/FirmwareFormUpdate.vue
@@ -69,7 +69,7 @@
           {{ $t('pageFirmware.form.updateFirmware.startUpdate') }}
         </b-btn>
         <alert
-          v-if="isServerPowerOffRequired && !isHostOff"
+          v-if="isServerPowerOffRequired && !isServerOff"
           variant="warning"
           :small="true"
           class="mt-4"
@@ -108,7 +108,7 @@
       type: Boolean,
       default: false,
     },
-    isHostOff: {
+    isServerOff: {
       required: true,
       type: Boolean,
     },
diff --git a/src/views/Control/FactoryReset/FactoryResetModal.vue b/src/views/Control/FactoryReset/FactoryResetModal.vue
index bf92b17..170bf28 100644
--- a/src/views/Control/FactoryReset/FactoryResetModal.vue
+++ b/src/views/Control/FactoryReset/FactoryResetModal.vue
@@ -22,7 +22,7 @@
     </ul>
 
     <!-- Warning message -->
-    <template v-if="!isHostOff">
+    <template v-if="!isServerOff">
       <p class="d-flex mb-2">
         <status-icon status="danger" />
         <span id="reset-to-default-warning" class="ml-1">
@@ -82,17 +82,17 @@
     };
   },
   computed: {
-    hostStatus() {
-      return this.$store.getters['global/hostStatus'];
+    serverStatus() {
+      return this.$store.getters['global/serverStatus'];
     },
-    isHostOff() {
-      return this.hostStatus === 'off' ? true : false;
+    isServerOff() {
+      return this.serverStatus === 'off' ? true : false;
     },
   },
   validations: {
     confirm: {
       mustBeTrue: function (value) {
-        return this.isHostOff || value === true;
+        return this.isServerOff || value === true;
       },
     },
   },
diff --git a/src/views/Control/Kvm/KvmConsole.vue b/src/views/Control/Kvm/KvmConsole.vue
index d844b4b..d7ec31e 100644
--- a/src/views/Control/Kvm/KvmConsole.vue
+++ b/src/views/Control/Kvm/KvmConsole.vue
@@ -8,8 +8,8 @@
               {{ $t('pageKvm.status') }}:
             </dt>
             <dd class="d-inline">
-              <status-icon :status="hostStatusIcon" />
-              <span class="d-none d-md-inline"> {{ hostStatus }}</span>
+              <status-icon :status="serverStatusIcon" />
+              <span class="d-none d-md-inline"> {{ serverStatus }}</span>
             </dd>
           </dl>
         </b-col>
@@ -72,7 +72,7 @@
     };
   },
   computed: {
-    hostStatusIcon() {
+    serverStatusIcon() {
       if (this.status === Connected) {
         return 'success';
       } else if (this.status === Disconnected) {
@@ -80,7 +80,7 @@
       }
       return 'secondary';
     },
-    hostStatus() {
+    serverStatus() {
       if (this.status === Connected) {
         return this.$t('pageKvm.connected');
       } else if (this.status === Disconnected) {
diff --git a/src/views/Control/SerialOverLan/SerialOverLanConsole.vue b/src/views/Control/SerialOverLan/SerialOverLanConsole.vue
index 6c16c55..0bda43d 100644
--- a/src/views/Control/SerialOverLan/SerialOverLanConsole.vue
+++ b/src/views/Control/SerialOverLan/SerialOverLanConsole.vue
@@ -7,7 +7,7 @@
             {{ $t('pageSerialOverLan.status') }}:
           </dt>
           <dd class="d-inline">
-            <status-icon :status="hostStatusIcon" /> {{ connectionStatus }}
+            <status-icon :status="serverStatusIcon" /> {{ connectionStatus }}
           </dd>
         </dl>
       </b-col>
@@ -49,20 +49,20 @@
     };
   },
   computed: {
-    hostStatus() {
-      return this.$store.getters['global/hostStatus'];
+    serverStatus() {
+      return this.$store.getters['global/serverStatus'];
     },
-    hostStatusIcon() {
-      return this.hostStatus === 'on' ? 'success' : 'danger';
+    serverStatusIcon() {
+      return this.serverStatus === 'on' ? 'success' : 'danger';
     },
     connectionStatus() {
-      return this.hostStatus === 'on'
+      return this.serverStatus === 'on'
         ? this.$t('pageSerialOverLan.connected')
         : this.$t('pageSerialOverLan.disconnected');
     },
   },
   created() {
-    this.$store.dispatch('global/getHostStatus');
+    this.$store.dispatch('global/getServerStatus');
   },
   mounted() {
     this.openTerminal();
diff --git a/src/views/Control/ServerPowerOperations/BootSettings.vue b/src/views/Control/ServerPowerOperations/BootSettings.vue
index eda4eda..efd8d34 100644
--- a/src/views/Control/ServerPowerOperations/BootSettings.vue
+++ b/src/views/Control/ServerPowerOperations/BootSettings.vue
@@ -60,14 +60,14 @@
   data() {
     return {
       form: {
-        bootOption: this.$store.getters['hostBootSettings/bootSource'],
-        oneTimeBoot: this.$store.getters['hostBootSettings/overrideEnabled'],
-        tpmPolicyOn: this.$store.getters['hostBootSettings/tpmEnabled'],
+        bootOption: this.$store.getters['serverBootSettings/bootSource'],
+        oneTimeBoot: this.$store.getters['serverBootSettings/overrideEnabled'],
+        tpmPolicyOn: this.$store.getters['serverBootSettings/tpmEnabled'],
       },
     };
   },
   computed: {
-    ...mapState('hostBootSettings', [
+    ...mapState('serverBootSettings', [
       'bootSourceOptions',
       'bootSource',
       'overrideEnabled',
@@ -96,7 +96,7 @@
   },
   created() {
     this.$store
-      .dispatch('hostBootSettings/getTpmPolicy')
+      .dispatch('serverBootSettings/getTpmPolicy')
       .finally(() =>
         this.$root.$emit('server-power-operations-boot-settings-complete')
       );
@@ -122,7 +122,7 @@
       settings = { bootSource, overrideEnabled, tpmEnabled };
 
       this.$store
-        .dispatch('hostBootSettings/saveSettings', settings)
+        .dispatch('serverBootSettings/saveSettings', settings)
         .then((message) => this.successToast(message))
         .catch(({ message }) => this.errorToast(message))
         .finally(() => {
diff --git a/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue
index 4ea7765..9e03083 100644
--- a/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue
+++ b/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue
@@ -9,15 +9,15 @@
           <b-row>
             <b-col>
               <dl>
-                <dt>{{ $t('pageServerPowerOperations.hostStatus') }}</dt>
+                <dt>{{ $t('pageServerPowerOperations.serverStatus') }}</dt>
                 <dd
-                  v-if="hostStatus === 'on'"
+                  v-if="serverStatus === 'on'"
                   data-test-id="powerServerOps-text-hostStatus"
                 >
                   {{ $t('global.status.on') }}
                 </dd>
                 <dd
-                  v-else-if="hostStatus === 'off'"
+                  v-else-if="serverStatus === 'off'"
                   data-test-id="powerServerOps-text-hostStatus"
                 >
                   {{ $t('global.status.off') }}
@@ -51,7 +51,7 @@
     <b-row>
       <b-col v-if="hasBootSourceOptions" sm="8" md="6" xl="4">
         <page-section
-          :section-title="$t('pageServerPowerOperations.hostOsBootSettings')"
+          :section-title="$t('pageServerPowerOperations.serverBootSettings')"
         >
           <boot-settings />
         </page-section>
@@ -68,7 +68,7 @@
               {{ $t('pageServerPowerOperations.operationInProgress') }}
             </alert>
           </template>
-          <template v-else-if="hostStatus === 'off'">
+          <template v-else-if="serverStatus === 'off'">
             <b-button
               variant="primary"
               data-test-id="serverPowerOperations-button-powerOn"
@@ -170,8 +170,8 @@
     };
   },
   computed: {
-    hostStatus() {
-      return this.$store.getters['global/hostStatus'];
+    serverStatus() {
+      return this.$store.getters['global/serverStatus'];
     },
     isOperationInProgress() {
       return this.$store.getters['controls/isOperationInProgress'];
@@ -180,11 +180,11 @@
       return this.$store.getters['controls/lastPowerOperationTime'];
     },
     oneTimeBootEnabled() {
-      return this.$store.getters['hostBootSettings/overrideEnabled'];
+      return this.$store.getters['serverBootSettings/overrideEnabled'];
     },
     hasBootSourceOptions() {
       let bootOptions = this.$store.getters[
-        'hostBootSettings/bootSourceOptions'
+        'serverBootSettings/bootSourceOptions'
       ];
       return bootOptions.length !== 0;
     },
@@ -197,14 +197,14 @@
       );
     });
     Promise.all([
-      this.$store.dispatch('hostBootSettings/getBootSettings'),
+      this.$store.dispatch('serverBootSettings/getBootSettings'),
       this.$store.dispatch('controls/getLastPowerOperationTime'),
       bootSettingsPromise,
     ]).finally(() => this.endLoader());
   },
   methods: {
     powerOn() {
-      this.$store.dispatch('controls/hostPowerOn');
+      this.$store.dispatch('controls/serverPowerOn');
     },
     rebootServer() {
       const modalMessage = this.$t(
@@ -220,13 +220,13 @@
         this.$bvModal
           .msgBoxConfirm(modalMessage, modalOptions)
           .then((confirmed) => {
-            if (confirmed) this.$store.dispatch('controls/hostSoftReboot');
+            if (confirmed) this.$store.dispatch('controls/serverSoftReboot');
           });
       } else if (this.form.rebootOption === 'immediate') {
         this.$bvModal
           .msgBoxConfirm(modalMessage, modalOptions)
           .then((confirmed) => {
-            if (confirmed) this.$store.dispatch('controls/hostHardReboot');
+            if (confirmed) this.$store.dispatch('controls/serverHardReboot');
           });
       }
     },
@@ -244,14 +244,14 @@
         this.$bvModal
           .msgBoxConfirm(modalMessage, modalOptions)
           .then((confirmed) => {
-            if (confirmed) this.$store.dispatch('controls/hostSoftPowerOff');
+            if (confirmed) this.$store.dispatch('controls/serverSoftPowerOff');
           });
       }
       if (this.form.shutdownOption === 'immediate') {
         this.$bvModal
           .msgBoxConfirm(modalMessage, modalOptions)
           .then((confirmed) => {
-            if (confirmed) this.$store.dispatch('controls/hostHardPowerOff');
+            if (confirmed) this.$store.dispatch('controls/serverHardPowerOff');
           });
       }
     },
