diff --git a/src/env/components/FirmwareSingleImage/FirmwareAlertServerPower.vue b/src/env/components/FirmwareSingleImage/FirmwareAlertServerPower.vue
deleted file mode 100644
index f7ac0fc..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareAlertServerPower.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-  <b-row>
-    <b-col xl="10">
-      <!-- Operation in progress alert -->
-      <alert v-if="isOperationInProgress" variant="info" class="mb-5">
-        <p>
-          {{ $t('pageFirmware.singleFileUpload.alert.operationInProgress') }}
-        </p>
-      </alert>
-      <!-- Power off server warning alert -->
-      <alert v-else-if="!isHostOff" variant="warning" class="mb-5">
-        <p class="mb-0">
-          {{
-            $t('pageFirmware.singleFileUpload.alert.serverMustBePoweredOffTo')
-          }}
-        </p>
-        <ul class="m-0">
-          <li>
-            {{
-              $t(
-                'pageFirmware.singleFileUpload.alert.switchRunningAndBackupImages'
-              )
-            }}
-          </li>
-          <li>
-            {{ $t('pageFirmware.singleFileUpload.alert.updateFirmware') }}
-          </li>
-        </ul>
-        <template #action>
-          <b-link to="/control/server-power-operations">
-            {{
-              $t(
-                'pageFirmware.singleFileUpload.alert.viewServerPowerOperations'
-              )
-            }}
-          </b-link>
-        </template>
-      </alert>
-    </b-col>
-  </b-row>
-</template>
-
-<script>
-import Alert from '@/components/Global/Alert';
-
-export default {
-  components: { Alert },
-  props: {
-    isHostOff: {
-      required: true,
-      type: Boolean,
-    },
-  },
-  computed: {
-    isOperationInProgress() {
-      return this.$store.getters['controls/isOperationInProgress'];
-    },
-  },
-};
-</script>
diff --git a/src/env/components/FirmwareSingleImage/FirmwareCardsBmc.vue b/src/env/components/FirmwareSingleImage/FirmwareCardsBmc.vue
deleted file mode 100644
index 857adf0..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareCardsBmc.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-<template>
-  <div>
-    <page-section :section-title="sectionTitle">
-      <b-card-group deck>
-        <!-- Running image -->
-        <b-card>
-          <template #header>
-            <p class="font-weight-bold m-0">
-              {{ $t('pageFirmware.singleFileUpload.cardTitleRunning') }}
-            </p>
-          </template>
-          <dl class="mb-0">
-            <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt>
-            <dd class="mb-0">{{ runningVersion }}</dd>
-          </dl>
-        </b-card>
-
-        <!-- Backup image -->
-        <b-card>
-          <template #header>
-            <p class="font-weight-bold m-0">
-              {{ $t('pageFirmware.singleFileUpload.cardTitleBackup') }}
-            </p>
-          </template>
-          <dl>
-            <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt>
-            <dd>
-              <status-icon v-if="showBackupImageStatus" status="danger" />
-              <span v-if="showBackupImageStatus" class="sr-only">
-                {{ backupStatus }}
-              </span>
-              {{ backupVersion }}
-            </dd>
-          </dl>
-          <b-btn
-            v-b-modal.modal-switch-to-running
-            data-test-id="firmware-button-switchToRunning"
-            variant="link"
-            size="sm"
-            class="py-0 px-1 mt-2"
-            :disabled="isPageDisabled || !backup"
-          >
-            <icon-switch class="d-none d-sm-inline-block" />
-            {{ $t('pageFirmware.singleFileUpload.cardActionSwitchToRunning') }}
-          </b-btn>
-        </b-card>
-      </b-card-group>
-    </page-section>
-    <modal-switch-to-running :backup="backupVersion" @ok="switchToRunning" />
-  </div>
-</template>
-
-<script>
-import IconSwitch from '@carbon/icons-vue/es/arrows--horizontal/20';
-import PageSection from '@/components/Global/PageSection';
-import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
-import BVToastMixin from '@/components/Mixins/BVToastMixin';
-
-import ModalSwitchToRunning from './FirmwareModalSwitchToRunning';
-
-export default {
-  components: { IconSwitch, ModalSwitchToRunning, PageSection },
-  mixins: [BVToastMixin, LoadingBarMixin],
-  props: {
-    isPageDisabled: {
-      required: true,
-      type: Boolean,
-      default: false,
-    },
-  },
-  data() {
-    return {
-      loading,
-    };
-  },
-  computed: {
-    isSingleFileUploadEnabled() {
-      return this.$store.getters[
-        'firmwareSingleImage/isSingleFileUploadEnabled'
-      ];
-    },
-    sectionTitle() {
-      if (this.isSingleFileUploadEnabled) {
-        return this.$t(
-          'pageFirmware.singleFileUpload.sectionTitleBmcCardsCombined'
-        );
-      }
-      return this.$t('pageFirmware.singleFileUpload.sectionTitleBmcCards');
-    },
-    running() {
-      return this.$store.getters['firmwareSingleImage/activeBmcFirmware'];
-    },
-    backup() {
-      return this.$store.getters['firmwareSingleImage/backupBmcFirmware'];
-    },
-    runningVersion() {
-      return this.running?.version || '--';
-    },
-    backupVersion() {
-      return this.backup?.version || '--';
-    },
-    backupStatus() {
-      return this.backup?.status || null;
-    },
-    showBackupImageStatus() {
-      return (
-        this.backupStatus === 'Critical' || this.backupStatus === 'Warning'
-      );
-    },
-  },
-  methods: {
-    switchToRunning() {
-      this.startLoader();
-      const timerId = setTimeout(() => {
-        this.endLoader();
-        this.infoToast(
-          this.$t('pageFirmware.singleFileUpload.toast.verifySwitchMessage'),
-          {
-            title: this.$t('pageFirmware.singleFileUpload.toast.verifySwitch'),
-            refreshAction: true,
-          }
-        );
-      }, 60000);
-
-      this.$store
-        .dispatch('firmwareSingleImage/switchFirmwareAndReboot')
-        .then(() =>
-          this.infoToast(
-            this.$t('pageFirmware.singleFileUpload.toast.rebootStartedMessage'),
-            {
-              title: this.$t(
-                'pageFirmware.singleFileUpload.toast.rebootStarted'
-              ),
-            }
-          )
-        )
-        .catch(({ message }) => {
-          this.errorToast(message);
-          clearTimeout(timerId);
-          this.endLoader();
-        });
-    },
-  },
-};
-</script>
diff --git a/src/env/components/FirmwareSingleImage/FirmwareCardsHost.vue b/src/env/components/FirmwareSingleImage/FirmwareCardsHost.vue
deleted file mode 100644
index c47f60f..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareCardsHost.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-<template>
-  <page-section
-    :section-title="$t('pageFirmware.singleFileUpload.sectionTitleHostCards')"
-  >
-    <b-card-group deck>
-      <!-- Running image -->
-      <b-card>
-        <template #header>
-          <p class="font-weight-bold m-0">
-            {{ $t('pageFirmware.singleFileUpload.cardTitleRunning') }}
-          </p>
-        </template>
-        <dl class="mb-0">
-          <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt>
-          <dd class="mb-0">{{ runningVersion }}</dd>
-        </dl>
-      </b-card>
-
-      <!-- Backup image -->
-      <b-card>
-        <template #header>
-          <p class="font-weight-bold m-0">
-            {{ $t('pageFirmware.singleFileUpload.cardTitleBackup') }}
-          </p>
-        </template>
-        <dl class="mb-0">
-          <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt>
-          <dd class="mb-0">
-            <status-icon v-if="showBackupImageStatus" status="danger" />
-            <span v-if="showBackupImageStatus" class="sr-only">
-              {{ backupStatus }}
-            </span>
-            {{ backupVersion }}
-          </dd>
-        </dl>
-      </b-card>
-    </b-card-group>
-  </page-section>
-</template>
-
-<script>
-import PageSection from '@/components/Global/PageSection';
-
-export default {
-  components: { PageSection },
-  computed: {
-    running() {
-      return this.$store.getters['firmwareSingleImage/activeHostFirmware'];
-    },
-    backup() {
-      return this.$store.getters['firmwareSingleImage/backupHostFirmware'];
-    },
-    runningVersion() {
-      return this.running?.version || '--';
-    },
-    backupVersion() {
-      return this.backup?.version || '--';
-    },
-    backupStatus() {
-      return this.backup?.status || null;
-    },
-    showBackupImageStatus() {
-      return (
-        this.backupStatus === 'Critical' || this.backupStatus === 'Warning'
-      );
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-.page-section {
-  margin-top: -$spacer * 1.5;
-}
-</style>
diff --git a/src/env/components/FirmwareSingleImage/FirmwareFormUpdate.vue b/src/env/components/FirmwareSingleImage/FirmwareFormUpdate.vue
deleted file mode 100644
index f13b8e0..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareFormUpdate.vue
+++ /dev/null
@@ -1,235 +0,0 @@
-<template>
-  <div>
-    <div class="form-background p-3">
-      <b-form @submit.prevent="onSubmitUpload">
-        <b-form-group
-          v-if="isTftpUploadAvailable"
-          :label="
-            $t('pageFirmware.singleFileUpload.form.updateFirmware.fileSource')
-          "
-          :disabled="isPageDisabled"
-        >
-          <b-form-radio v-model="isWorkstationSelected" :value="true">
-            {{
-              $t(
-                'pageFirmware.singleFileUpload.form.updateFirmware.workstation'
-              )
-            }}
-          </b-form-radio>
-          <b-form-radio v-model="isWorkstationSelected" :value="false">
-            {{
-              $t('pageFirmware.singleFileUpload.form.updateFirmware.tftpServer')
-            }}
-          </b-form-radio>
-        </b-form-group>
-
-        <!-- Workstation Upload -->
-        <template v-if="isWorkstationSelected">
-          <b-form-group
-            :label="
-              $t('pageFirmware.singleFileUpload.form.updateFirmware.imageFile')
-            "
-            label-for="image-file"
-          >
-            <b-form-text id="image-file-help-block">
-              {{
-                $t(
-                  'pageFirmware.singleFileUpload.form.updateFirmware.imageFileHelperText'
-                )
-              }}
-            </b-form-text>
-            <form-file
-              id="image-file"
-              accept=".tar"
-              :disabled="isPageDisabled"
-              :state="getValidationState($v.file)"
-              aria-describedby="image-file-help-block"
-              @input="onFileUpload($event)"
-            >
-              <template #invalid>
-                <b-form-invalid-feedback role="alert">
-                  {{ $t('global.form.required') }}
-                </b-form-invalid-feedback>
-              </template>
-            </form-file>
-          </b-form-group>
-        </template>
-
-        <!-- TFTP Server Upload -->
-        <template v-else>
-          <b-form-group
-            :label="
-              $t(
-                'pageFirmware.singleFileUpload.form.updateFirmware.fileAddress'
-              )
-            "
-            label-for="tftp-address"
-          >
-            <b-form-input
-              id="tftp-address"
-              v-model="tftpFileAddress"
-              type="text"
-              :state="getValidationState($v.tftpFileAddress)"
-              :disabled="isPageDisabled"
-              @input="$v.tftpFileAddress.$touch()"
-            />
-            <b-form-invalid-feedback role="alert">
-              {{ $t('global.form.fieldRequired') }}
-            </b-form-invalid-feedback>
-          </b-form-group>
-        </template>
-        <b-btn
-          data-test-id="firmware-button-startUpdate"
-          type="submit"
-          variant="primary"
-          :disabled="isPageDisabled"
-        >
-          {{
-            $t('pageFirmware.singleFileUpload.form.updateFirmware.startUpdate')
-          }}
-        </b-btn>
-        <alert
-          v-if="isServerPowerOffRequired && !isHostOff"
-          variant="warning"
-          :small="true"
-          class="mt-4"
-        >
-          <p class="col-form-label">
-            {{
-              $t(
-                'pageFirmware.singleFileUpload.alert.serverMustBePoweredOffToUpdateFirmware'
-              )
-            }}
-          </p>
-        </alert>
-      </b-form>
-    </div>
-
-    <!-- Modals -->
-    <modal-update-firmware @ok="updateFirmware" />
-  </div>
-</template>
-
-<script>
-import { requiredIf } from 'vuelidate/lib/validators';
-
-import BVToastMixin from '@/components/Mixins/BVToastMixin';
-import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
-import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
-
-import Alert from '@/components/Global/Alert';
-import FormFile from '@/components/Global/FormFile';
-import ModalUpdateFirmware from './FirmwareModalUpdateFirmware';
-
-export default {
-  components: { Alert, FormFile, ModalUpdateFirmware },
-  mixins: [BVToastMixin, LoadingBarMixin, VuelidateMixin],
-  props: {
-    isPageDisabled: {
-      required: true,
-      type: Boolean,
-      default: false,
-    },
-    isHostOff: {
-      required: true,
-      type: Boolean,
-    },
-  },
-  data() {
-    return {
-      loading,
-      isWorkstationSelected: true,
-      file: null,
-      tftpFileAddress: null,
-      isServerPowerOffRequired:
-        process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true',
-    };
-  },
-  computed: {
-    isTftpUploadAvailable() {
-      return this.$store.getters['firmwareSingleImage/isTftpUploadAvailable'];
-    },
-  },
-  watch: {
-    isWorkstationSelected: function () {
-      this.$v.$reset();
-      this.file = null;
-      this.tftpFileAddress = null;
-    },
-  },
-  validations() {
-    return {
-      file: {
-        required: requiredIf(function () {
-          return this.isWorkstationSelected;
-        }),
-      },
-      tftpFileAddress: {
-        required: requiredIf(function () {
-          return !this.isWorkstationSelected;
-        }),
-      },
-    };
-  },
-  created() {
-    this.$store.dispatch('firmwareSingleImage/getUpdateServiceSettings');
-  },
-  methods: {
-    updateFirmware() {
-      this.startLoader();
-      const timerId = setTimeout(() => {
-        this.endLoader();
-        this.infoToast(
-          this.$t('pageFirmware.singleFileUpload.toast.verifyUpdateMessage'),
-          {
-            title: this.$t('pageFirmware.singleFileUpload.toast.verifyUpdate'),
-            refreshAction: true,
-          }
-        );
-      }, 360000);
-      this.infoToast(
-        this.$t('pageFirmware.singleFileUpload.toast.updateStartedMessage'),
-        {
-          title: this.$t('pageFirmware.singleFileUpload.toast.updateStarted'),
-          timestamp: true,
-        }
-      );
-      if (this.isWorkstationSelected) {
-        this.dispatchWorkstationUpload(timerId);
-      } else {
-        this.dispatchTftpUpload(timerId);
-      }
-    },
-    dispatchWorkstationUpload(timerId) {
-      this.$store
-        .dispatch('firmwareSingleImage/uploadFirmware', this.file)
-        .catch(({ message }) => {
-          this.endLoader();
-          this.errorToast(message);
-          clearTimeout(timerId);
-        });
-    },
-    dispatchTftpUpload(timerId) {
-      this.$store
-        .dispatch(
-          'firmwareSingleImage/uploadFirmwareTFTP',
-          this.tftpFileAddress
-        )
-        .catch(({ message }) => {
-          this.endLoader();
-          this.errorToast(message);
-          clearTimeout(timerId);
-        });
-    },
-    onSubmitUpload() {
-      this.$v.$touch();
-      if (this.$v.$invalid) return;
-      this.$bvModal.show('modal-update-firmware');
-    },
-    onFileUpload(file) {
-      this.file = file;
-      this.$v.file.$touch();
-    },
-  },
-};
-</script>
diff --git a/src/env/components/FirmwareSingleImage/FirmwareModalSwitchToRunning.vue b/src/env/components/FirmwareSingleImage/FirmwareModalSwitchToRunning.vue
deleted file mode 100644
index 56f505d..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareModalSwitchToRunning.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-  <b-modal
-    id="modal-switch-to-running"
-    :ok-title="$t('pageFirmware.singleFileUpload.modal.switchImages')"
-    :cancel-title="$t('global.action.cancel')"
-    :title="$t('pageFirmware.singleFileUpload.modal.switchRunningImage')"
-    @ok="$emit('ok')"
-  >
-    <p>
-      {{ $t('pageFirmware.singleFileUpload.modal.switchRunningImageInfo') }}
-    </p>
-    <p class="m-0">
-      {{
-        $t('pageFirmware.singleFileUpload.modal.switchRunningImageInfo2', {
-          backup,
-        })
-      }}
-    </p>
-  </b-modal>
-</template>
-
-<script>
-export default {
-  props: {
-    backup: {
-      type: String,
-      required: true,
-    },
-  },
-};
-</script>
diff --git a/src/env/components/FirmwareSingleImage/FirmwareModalUpdateFirmware.vue b/src/env/components/FirmwareSingleImage/FirmwareModalUpdateFirmware.vue
deleted file mode 100644
index d6c52f9..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareModalUpdateFirmware.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-  <b-modal
-    id="modal-update-firmware"
-    :title="$t('pageFirmware.singleFileUpload.sectionTitleUpdateFirmware')"
-    :ok-title="
-      $t('pageFirmware.singleFileUpload.form.updateFirmware.startUpdate')
-    "
-    :cancel-title="$t('global.action.cancel')"
-    @ok="$emit('ok')"
-  >
-    <template v-if="isSingleFileUploadEnabled">
-      <p>
-        {{ $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfo') }}
-      </p>
-      <p>
-        {{
-          $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfo2', {
-            running: runningBmcVersion,
-          })
-        }}
-      </p>
-      <p class="m-0">
-        {{ $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfo3') }}
-      </p>
-    </template>
-    <template v-else>
-      {{ $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfoDefault') }}
-    </template>
-  </b-modal>
-</template>
-
-<script>
-export default {
-  computed: {
-    runningBmc() {
-      return this.$store.getters['firmwareSingleImage/activeBmcFirmware'];
-    },
-    runningBmcVersion() {
-      return this.runningBmc?.version || '--';
-    },
-    isSingleFileUploadEnabled() {
-      return this.$store.getters[
-        'firmwareSingleImage/isSingleFileUploadEnabled'
-      ];
-    },
-  },
-};
-</script>
diff --git a/src/env/components/FirmwareSingleImage/FirmwareSingleImage.vue b/src/env/components/FirmwareSingleImage/FirmwareSingleImage.vue
deleted file mode 100644
index 2e601bd..0000000
--- a/src/env/components/FirmwareSingleImage/FirmwareSingleImage.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <b-container fluid="xl">
-    <page-title />
-    <alerts-server-power
-      v-if="isServerPowerOffRequired"
-      :is-host-off="isHostOff"
-    />
-
-    <!-- Firmware cards -->
-    <b-row>
-      <b-col xl="10">
-        <!-- BMC Firmware -->
-        <bmc-cards :is-page-disabled="isPageDisabled" />
-
-        <!-- Host Firmware -->
-        <host-cards v-if="!isSingleFileUploadEnabled" />
-      </b-col>
-    </b-row>
-
-    <!-- Update firmware-->
-    <page-section
-      :section-title="
-        $t('pageFirmware.singleFileUpload.sectionTitleUpdateFirmware')
-      "
-    >
-      <b-row>
-        <b-col sm="8" md="6" xl="4">
-          <!-- Update form -->
-          <form-update
-            :is-host-off="isHostOff"
-            :is-page-disabled="isPageDisabled"
-          />
-        </b-col>
-      </b-row>
-    </page-section>
-  </b-container>
-</template>
-
-<script>
-import AlertsServerPower from './FirmwareAlertServerPower';
-import BmcCards from './FirmwareCardsBmc';
-import FormUpdate from './FirmwareFormUpdate';
-import HostCards from './FirmwareCardsHost';
-import PageSection from '@/components/Global/PageSection';
-import PageTitle from '@/components/Global/PageTitle';
-
-import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
-
-export default {
-  name: 'FirmwareSingleImage',
-  components: {
-    AlertsServerPower,
-    BmcCards,
-    FormUpdate,
-    HostCards,
-    PageSection,
-    PageTitle,
-  },
-  mixins: [LoadingBarMixin],
-  beforeRouteLeave(to, from, next) {
-    this.hideLoader();
-    next();
-  },
-  data() {
-    return {
-      loading,
-      isServerPowerOffRequired:
-        process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true',
-    };
-  },
-  computed: {
-    hostStatus() {
-      return this.$store.getters['global/hostStatus'];
-    },
-    isHostOff() {
-      return this.hostStatus === 'off' ? true : false;
-    },
-    isSingleFileUploadEnabled() {
-      return this.$store.getters[
-        'firmwareSingleImage/isSingleFileUploadEnabled'
-      ];
-    },
-    isPageDisabled() {
-      if (this.isServerPowerOffRequired) {
-        return !this.isHostOff || this.loading || this.isOperationInProgress;
-      }
-      return this.loading || this.isOperationInProgress;
-    },
-  },
-  created() {
-    this.startLoader();
-    this.$store
-      .dispatch('firmwareSingleImage/getFirmwareInformation')
-      .finally(() => this.endLoader());
-  },
-};
-</script>
diff --git a/src/env/components/FirmwareSingleImage/index.js b/src/env/components/FirmwareSingleImage/index.js
deleted file mode 100644
index 06f31f9..0000000
--- a/src/env/components/FirmwareSingleImage/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import FirmwareSingleImage from './FirmwareSingleImage.vue';
-export default FirmwareSingleImage;
diff --git a/src/env/router/ibm.js b/src/env/router/ibm.js
index 969146c..c4e1a69 100644
--- a/src/env/router/ibm.js
+++ b/src/env/router/ibm.js
@@ -4,6 +4,7 @@
 import ConsoleLayout from '@/layouts/ConsoleLayout.vue';
 import DateTimeSettings from '@/views/Configuration/DateTimeSettings';
 import EventLogs from '@/views/Health/EventLogs';
+import Firmware from '@/views/Configuration/Firmware';
 import HardwareStatus from '@/views/Health/HardwareStatus';
 import Ldap from '@/views/AccessControl/Ldap';
 import LocalUserManagement from '@/views/AccessControl/LocalUserManagement';
@@ -26,7 +27,6 @@
 import i18n from '@/i18n';
 
 // Custom components
-import FirmwareSingleImage from '../components/FirmwareSingleImage';
 import Dumps from '../components/Dumps';
 
 const routes = [
@@ -168,7 +168,7 @@
       {
         path: '/configuration/firmware',
         name: 'firmware',
-        component: FirmwareSingleImage,
+        component: Firmware,
         meta: {
           title: i18n.t('appPageTitle.firmware'),
         },
diff --git a/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js b/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js
deleted file mode 100644
index ae4d633..0000000
--- a/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js
+++ /dev/null
@@ -1,195 +0,0 @@
-import api from '@/store/api';
-import i18n from '@/i18n';
-
-const FirmwareSingleImageStore = {
-  namespaced: true,
-  state: {
-    bmcFirmware: [],
-    hostFirmware: [],
-    bmcActiveFirmwareId: null,
-    hostActiveFirmwareId: null,
-    applyTime: null,
-    tftpAvailable: false,
-  },
-  getters: {
-    isTftpUploadAvailable: (state) => state.tftpAvailable,
-    isSingleFileUploadEnabled: (state) => state.hostFirmware.length === 0,
-    activeBmcFirmware: (state) => {
-      return state.bmcFirmware.find(
-        (firmware) => firmware.id === state.bmcActiveFirmwareId
-      );
-    },
-    activeHostFirmware: (state) => {
-      return state.hostFirmware.find(
-        (firmware) => firmware.id === state.hostActiveFirmwareId
-      );
-    },
-    backupBmcFirmware: (state) => {
-      return state.bmcFirmware.find(
-        (firmware) => firmware.id !== state.bmcActiveFirmwareId
-      );
-    },
-    backupHostFirmware: (state) => {
-      return state.hostFirmware.find(
-        (firmware) => firmware.id !== state.hostActiveFirmwareId
-      );
-    },
-    bmcFirmwareCurrentVersion: (_, getters) =>
-      getters.activeBmcFirmware?.version, //this getter is needed for the Overview page,
-  },
-  mutations: {
-    setActiveBmcFirmwareId: (state, id) => (state.bmcActiveFirmwareId = id),
-    setActiveHostFirmwareId: (state, id) => (state.hostActiveFirmwareId = id),
-    setBmcFirmware: (state, firmware) => (state.bmcFirmware = firmware),
-    setHostFirmware: (state, firmware) => (state.hostFirmware = firmware),
-    setApplyTime: (state, applyTime) => (state.applyTime = applyTime),
-    setTftpUploadAvailable: (state, tftpAvailable) =>
-      (state.tftpAvailable = tftpAvailable),
-  },
-  actions: {
-    async getFirmwareInformation({ dispatch }) {
-      dispatch('getActiveHostFirmware');
-      dispatch('getActiveBmcFirmware');
-      return await dispatch('getFirmwareInventory');
-    },
-    getActiveBmcFirmware({ commit }) {
-      return api
-        .get('/redfish/v1/Managers/bmc')
-        .then(({ data: { Links } }) => {
-          const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop();
-          commit('setActiveBmcFirmwareId', id);
-        })
-        .catch((error) => console.log(error));
-    },
-    getActiveHostFirmware({ commit }) {
-      return api
-        .get('/redfish/v1/Systems/system/Bios')
-        .then(({ data: { Links } }) => {
-          const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop();
-          commit('setActiveHostFirmwareId', id);
-        })
-        .catch((error) => console.log(error));
-    },
-    async getFirmwareInventory({ commit }) {
-      const inventoryList = await api
-        .get('/redfish/v1/UpdateService/FirmwareInventory')
-        .then(({ data: { Members = [] } = {} }) =>
-          Members.map((item) => api.get(item['@odata.id']))
-        )
-        .catch((error) => console.log(error));
-      await api
-        .all(inventoryList)
-        .then((response) => {
-          const bmcFirmware = [];
-          const hostFirmware = [];
-          response.forEach(({ data }) => {
-            const firmwareType = data?.RelatedItem?.[0]?.['@odata.id']
-              .split('/')
-              .pop();
-            const item = {
-              version: data?.Version,
-              id: data?.Id,
-              location: data?.['@odata.id'],
-              status: data?.Status?.Health,
-            };
-            if (firmwareType === 'bmc') {
-              bmcFirmware.push(item);
-            } else if (firmwareType === 'Bios') {
-              hostFirmware.push(item);
-            }
-          });
-          commit('setBmcFirmware', bmcFirmware);
-          commit('setHostFirmware', hostFirmware);
-        })
-        .catch((error) => {
-          console.log(error);
-        });
-    },
-    getUpdateServiceSettings({ commit }) {
-      api
-        .get('/redfish/v1/UpdateService')
-        .then(({ data }) => {
-          const applyTime =
-            data.HttpPushUriOptions.HttpPushUriApplyTime.ApplyTime;
-          const allowableActions =
-            data?.Actions?.['#UpdateService.SimpleUpdate']?.[
-              'TransferProtocol@Redfish.AllowableValues'
-            ];
-
-          commit('setApplyTime', applyTime);
-          if (allowableActions.includes('TFTP')) {
-            commit('setTftpUploadAvailable', true);
-          }
-        })
-        .catch((error) => console.log(error));
-    },
-    setApplyTimeImmediate({ commit }) {
-      const data = {
-        HttpPushUriOptions: {
-          HttpPushUriApplyTime: {
-            ApplyTime: 'Immediate',
-          },
-        },
-      };
-      return api
-        .patch('/redfish/v1/UpdateService', data)
-        .then(() => commit('setApplyTime', 'Immediate'))
-        .catch((error) => console.log(error));
-    },
-    async uploadFirmware({ state, dispatch }, image) {
-      if (state.applyTime !== 'Immediate') {
-        // ApplyTime must be set to Immediate before making
-        // request to update firmware
-        await dispatch('setApplyTimeImmediate');
-      }
-      return await api
-        .post('/redfish/v1/UpdateService', image, {
-          headers: { 'Content-Type': 'application/octet-stream' },
-        })
-        .catch((error) => {
-          console.log(error);
-          throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
-        });
-    },
-    async uploadFirmwareTFTP({ state, dispatch }, fileAddress) {
-      const data = {
-        TransferProtocol: 'TFTP',
-        ImageURI: fileAddress,
-      };
-      if (state.applyTime !== 'Immediate') {
-        // ApplyTime must be set to Immediate before making
-        // request to update firmware
-        await dispatch('setApplyTimeImmediate');
-      }
-      return await api
-        .post(
-          '/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate',
-          data
-        )
-        .catch((error) => {
-          console.log(error);
-          throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
-        });
-    },
-    async switchFirmwareAndReboot({ getters }) {
-      const backupLoaction = getters.backupBmcFirmware.location;
-      const data = {
-        Links: {
-          ActiveSoftwareImage: {
-            '@odata.id': backupLoaction,
-          },
-        },
-      };
-      return await api
-        .patch('/redfish/v1/Managers/bmc', data)
-        .catch((error) => {
-          console.log(error);
-          throw new Error(
-            i18n.t('pageFirmware.singleFileUpload.toast.errorSwitchImages')
-          );
-        });
-    },
-  },
-};
-
-export default FirmwareSingleImageStore;
diff --git a/src/env/store/ibm.js b/src/env/store/ibm.js
index e19dd48..980236f 100644
--- a/src/env/store/ibm.js
+++ b/src/env/store/ibm.js
@@ -1,11 +1,8 @@
 import store from '@/store';
-import FirmwareSingleImageStore from './FirmwareSingleImage/FirmwareSingleImageStore';
 import DumpsStore from './Dumps/DumpsStore';
 
 store.unregisterModule('virtualMedia');
 
-store.unregisterModule('firmware');
-store.registerModule('firmwareSingleImage', FirmwareSingleImageStore);
 store.registerModule('dumps', DumpsStore);
 
 export default store;
