diff --git a/src/store/modules/Configuration/FirmwareStore.js b/src/store/modules/Configuration/FirmwareStore.js
new file mode 100644
index 0000000..5185a13
--- /dev/null
+++ b/src/store/modules/Configuration/FirmwareStore.js
@@ -0,0 +1,60 @@
+import api from '../../api';
+
+const FirmwareStore = {
+  namespaced: true,
+  state: {
+    firmwareInfo: null,
+    bmcActiveVersion: '--',
+    hostActiveVersion: '--'
+  },
+  getters: {
+    firmwareInfo: state => state.firmwareInfo,
+    bmcActiveVersion: state => state.bmcActiveVersion,
+    hostActiveVersion: state => state.hostActiveVersion
+  },
+  mutations: {
+    setFirmwareInfo: (state, firmwareInfo) =>
+      (state.firmwareInfo = firmwareInfo),
+    setBmcActiveVersion: (state, bmcActiveVersion) =>
+      (state.bmcActiveVersion = bmcActiveVersion),
+    setHostActiveVersion: (state, hostActiveVersion) =>
+      (state.hostActiveVersion = hostActiveVersion)
+  },
+  actions: {
+    getFirmwareInfo({ commit }) {
+      api
+        .get('/xyz/openbmc_project/software/enumerate')
+        .then(response => {
+          const firmwareInfo = response.data.data;
+          const functionalImages =
+            firmwareInfo['/xyz/openbmc_project/software/functional'].endpoints;
+          for (let key in firmwareInfo) {
+            /**
+             * If "Functional" activation status is
+             * functional, else it is "activation"
+             * github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
+             */
+            if (firmwareInfo[key].hasOwnProperty('Version')) {
+              let activationStatus = '';
+              const imageType = firmwareInfo[key].Purpose.split('.').pop();
+              if (functionalImages.includes(key)) {
+                activationStatus = 'Functional';
+              }
+              // Get BMC and Host active Versions
+              if (activationStatus == 'Functional' && imageType == 'BMC') {
+                commit('setBmcActiveVersion', firmwareInfo[key].Version);
+              }
+              if (activationStatus == 'Functional' && imageType == 'Host') {
+                commit('setHostActiveVersion', firmwareInfo[key].Version);
+              }
+            }
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    }
+  }
+};
+
+export default FirmwareStore;
diff --git a/src/store/modules/Configuration/NetworkSettingsStore.js b/src/store/modules/Configuration/NetworkSettingsStore.js
new file mode 100644
index 0000000..ee58a77
--- /dev/null
+++ b/src/store/modules/Configuration/NetworkSettingsStore.js
@@ -0,0 +1,48 @@
+import api from '../../api';
+
+const NetworkSettingsStore = {
+  namespaced: true,
+  state: {
+    networkData: null,
+    ipAddress: '--',
+    macAddress: '--'
+  },
+  getters: {
+    networkData: state => state.networkData,
+    ipAddress: state => state.ipAddress,
+    macAddress: state => state.macAddress
+  },
+  mutations: {
+    setNetworkData: (state, networkData) => (state.networkData = networkData),
+    setIpAddress: (state, ipAddress) => (state.ipAddress = ipAddress),
+    setMacAddress: (state, macAddress) => (state.macAddress = macAddress)
+  },
+  actions: {
+    getNetworkData({ commit }) {
+      api
+        .get('/xyz/openbmc_project/network/enumerate')
+        .then(response => {
+          const networkData = response.data.data;
+          const ipAddresses = [];
+          const interfaceId = /eth[0-9]/;
+          for (let key in networkData) {
+            if (key.includes('ipv4')) {
+              ipAddresses.push(networkData[key].Address);
+            }
+            if (
+              key.match(interfaceId) &&
+              networkData[key].MACAddress !== undefined
+            ) {
+              commit('setMacAddress', networkData[key].MACAddress);
+            }
+          }
+          commit('setIpAddress', ipAddresses);
+        })
+        .catch(error => {
+          console.log('Network Data:', error);
+        });
+    }
+  }
+};
+
+export default NetworkSettingsStore;
diff --git a/src/store/modules/Control/PowerCapStore.js b/src/store/modules/Control/PowerCapStore.js
new file mode 100644
index 0000000..bef9f47
--- /dev/null
+++ b/src/store/modules/Control/PowerCapStore.js
@@ -0,0 +1,36 @@
+import api from '../../api';
+
+const PowerCapStore = {
+  namespaced: true,
+  state: {
+    powerCapData: null,
+    powerCapValue: 'Not enabled'
+  },
+  getters: {
+    powerCapData: state => state.powerCapData,
+    powerCapValue: state => state.powerCapValue
+  },
+  mutations: {
+    setPowerCapData: (state, powerCapData) =>
+      (state.powerCapData = powerCapData),
+    setPowerCapValue: (state, powerCapValue) =>
+      (state.powerCapValue = powerCapValue)
+  },
+  actions: {
+    getPowerCapData({ commit }) {
+      api
+        .get('/xyz/openbmc_project/control/host0/power_cap')
+        .then(response => {
+          const powerCapData = response.data.data;
+          if (powerCapData.PowerCapEnable) {
+            commit('setPowerCapValue', powerCapData.PowerCap + ' W');
+          }
+        })
+        .catch(error => {
+          console.log('Power cap error', error);
+        });
+    }
+  }
+};
+
+export default PowerCapStore;
diff --git a/src/store/modules/Control/PowerConsumptionStore.js b/src/store/modules/Control/PowerConsumptionStore.js
new file mode 100644
index 0000000..03ccffc
--- /dev/null
+++ b/src/store/modules/Control/PowerConsumptionStore.js
@@ -0,0 +1,35 @@
+import api from '../../api';
+
+const PowerConsumptionStore = {
+  namespaced: true,
+  state: {
+    powerData: null,
+    powerConsumption: 'Not available'
+  },
+  getters: {
+    powerData: state => state.powerData,
+    powerConsumption: state => state.powerConsumption
+  },
+  mutations: {
+    setPowerData: (state, powerData) => (state.powerData = powerData),
+    setPowerConsumption: (state, powerConsumption) =>
+      (state.powerConsumption = powerConsumption)
+  },
+  actions: {
+    getPowerData({ commit }) {
+      api
+        .get('/xyz/openbmc_project/sensors/power/total_power')
+        .then(response => {
+          const powerData = response.data.data;
+          let powerConsumption =
+            powerData.Value * Math.pow(10, powerData.Scale) + ' W';
+          commit('setPowerConsumption', powerConsumption);
+        })
+        .catch(error => {
+          console.log('Power Consumption', error);
+        });
+    }
+  }
+};
+
+export default PowerConsumptionStore;
diff --git a/src/store/modules/GlobalStore.js b/src/store/modules/GlobalStore.js
index 80d9c1a..18d5043 100644
--- a/src/store/modules/GlobalStore.js
+++ b/src/store/modules/GlobalStore.js
@@ -25,23 +25,19 @@
   namespaced: true,
   state: {
     hostName: '--',
+    bmcTime: null,
     hostStatus: 'unreachable'
   },
   getters: {
-    hostName(state) {
-      return state.hostName;
-    },
-    hostStatus(state) {
-      return state.hostStatus;
-    }
+    hostName: state => state.hostName,
+    hostStatus: state => state.hostStatus,
+    bmcTime: state => state.bmcTime
   },
   mutations: {
-    setHostName(state, hostName) {
-      state.hostName = hostName;
-    },
-    setHostStatus(state, hostState) {
-      state.hostStatus = hostStateMapper(hostState);
-    }
+    setHostName: (state, hostName) => (state.hostName = hostName),
+    setBmcTime: (state, bmcTime) => (state.bmcTime = bmcTime),
+    setHostStatus: (state, hostState) =>
+      (state.hostState = hostStateMapper(hostState))
   },
   actions: {
     getHostName({ commit }) {
@@ -53,6 +49,16 @@
         })
         .catch(error => console.log(error));
     },
+    getBmcTime({ commit }) {
+      api
+        .get('/xyz/openbmc_project/time/bmc')
+        .then(response => {
+          // bmcTime is stored in microseconds, convert to millseconds
+          const bmcTime = response.data.data.Elapsed / 1000;
+          commit('setBmcTime', bmcTime);
+        })
+        .catch(error => console.log(error));
+    },
     getHostStatus({ commit }) {
       api
         .get('/xyz/openbmc_project/state/host0/attr/CurrentHostState')
diff --git a/src/store/modules/Health/EventLogStore.js b/src/store/modules/Health/EventLogStore.js
new file mode 100644
index 0000000..404a963
--- /dev/null
+++ b/src/store/modules/Health/EventLogStore.js
@@ -0,0 +1,72 @@
+import api from '../../api';
+
+const severityToPriorityMap = {
+  Emergency: 'High',
+  Alert: 'High',
+  Critical: 'High',
+  Error: 'High',
+  Warning: 'Medium',
+  Notice: 'Low',
+  Debug: 'Low',
+  Informational: 'Low'
+};
+
+const EventLogStore = {
+  namespaced: true,
+  state: {
+    eventLogData: null
+  },
+  getters: {
+    eventLogData: state => state.eventLogData
+  },
+  mutations: {
+    setEventLogData: (state, eventLogData) =>
+      (state.eventLogData = eventLogData)
+  },
+  actions: {
+    getEventLogData({ commit }) {
+      api
+        .get('/xyz/openbmc_project/logging/enumerate')
+        .then(response => {
+          const eventLog = response.data.data;
+          const entryNumber = /[1-9]/;
+          const eventLogEntries = [];
+          /**
+           * Entry log endpoints:
+           * 'entry' + entry id contain event log entry information
+           * 'callout' contains part number and serial number for part affected
+           */
+          for (let key in eventLog) {
+            // Check for event log entry:
+            if (
+              key.includes('entry') &&
+              key.match(entryNumber) &&
+              !key.includes('callout')
+            ) {
+              const eventKey = eventLog[key];
+              const eventSeverity = eventKey.Severity.split('.').pop();
+              const eventPriority = severityToPriorityMap[eventSeverity];
+              eventLogEntries.push(
+                Object.assign(
+                  {
+                    logId: eventKey.Id,
+                    priority: eventPriority,
+                    timestamp: eventKey.Timestamp,
+                    eventID: eventKey.EventID,
+                    description: eventKey.Description
+                  },
+                  eventKey
+                )
+              );
+              commit('setEventLogData', eventLogEntries);
+            }
+          }
+        })
+        .catch(error => {
+          console.log('Event Log Data:', error);
+        });
+    }
+  }
+};
+
+export default EventLogStore;
diff --git a/src/store/modules/Overview/OverviewStore.js b/src/store/modules/Overview/OverviewStore.js
new file mode 100644
index 0000000..8d0613a
--- /dev/null
+++ b/src/store/modules/Overview/OverviewStore.js
@@ -0,0 +1,48 @@
+import api from '../../api';
+
+const OverviewStore = {
+  namespaced: true,
+  state: {
+    serverInfo: null,
+    serverModel: '--',
+    serverManufacturer: '--',
+    serverSerialNumber: '--'
+  },
+  getters: {
+    serverInfo: state => state.serverInfo,
+    serverModel: state => state.serverModel,
+    serverManufacturer: state => state.serverManufacturer,
+    serverSerialNumber: state => state.serverSerialNumber
+  },
+  mutations: {
+    setServerInfo: (state, serverInfo) => (state.serverInfo = serverInfo),
+    setServerModel: (state, serverModel) => (state.serverModel = serverModel),
+    setServerManufacturer: (state, serverManufacturer) =>
+      (state.serverManufacturer = serverManufacturer),
+    setServerSerialNumber: (state, serverSerialNumber) =>
+      (state.serverSerialNumber = serverSerialNumber)
+  },
+  actions: {
+    getServerInfo({ commit }) {
+      api
+        .get('/xyz/openbmc_project/inventory/system')
+        .then(response => {
+          const serverInfo = response.data.data;
+          if (serverInfo.Model) {
+            commit('setServerModel', serverInfo.Model);
+          }
+          if (serverInfo.SerialNumber) {
+            commit('setServerSerialNumber', serverInfo.SerialNumber);
+          }
+          if (serverInfo.Manufacturer) {
+            commit('setServerManufacturer', serverInfo.Manufacturer);
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    }
+  }
+};
+
+export default OverviewStore;
