diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 4fbf3c3..298cb83 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -2009,10 +2009,11 @@
             return;
         }
         const auto userIt = std::ranges::find_if(
-            users, [accountName](
-                       const std::pair<sdbusplus::message::object_path,
-                                       dbus::utility::DBusInteracesMap>& user) {
-                return accountName == user.first.filename();
+            users,
+            [accountName](
+                const std::pair<sdbusplus::message::object_path,
+                                dbus::utility::DBusInterfacesMap>& user) {
+            return accountName == user.first.filename();
             });
 
         if (userIt == users.end())
diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp
index 0073bc9..2fd6b96 100644
--- a/redfish-core/lib/certificate_service.hpp
+++ b/redfish-core/lib/certificate_service.hpp
@@ -819,7 +819,7 @@
             return;
         }
 
-        dbus::utility::DBusInteracesMap interfacesProperties;
+        dbus::utility::DBusInterfacesMap interfacesProperties;
 
         sdbusplus::message::object_path csrObjectPath;
         m.read(csrObjectPath, interfacesProperties);
diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp
index e09a125..78f25d4 100644
--- a/redfish-core/lib/processor.hpp
+++ b/redfish-core/lib/processor.hpp
@@ -78,7 +78,7 @@
 
 inline void getCpuDataByInterface(
     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-    const dbus::utility::DBusInteracesMap& cpuInterfacesProperties)
+    const dbus::utility::DBusInterfacesMap& cpuInterfacesProperties)
 {
     BMCWEB_LOG_DEBUG("Get CPU resources by interface.");
 
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 76a8bdd..f1cf96c 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -971,7 +971,7 @@
 inline void objectInterfacesToJson(
     const std::string& sensorName, const std::string& sensorType,
     const std::string& chassisSubNode,
-    const dbus::utility::DBusInteracesMap& interfacesDict,
+    const dbus::utility::DBusInterfacesMap& interfacesDict,
     nlohmann::json& sensorJson, InventoryItem* inventoryItem)
 {
     for (const auto& [interface, valuesDict] : interfacesDict)
@@ -1304,7 +1304,7 @@
  */
 inline void storeInventoryItemData(
     InventoryItem& inventoryItem,
-    const dbus::utility::DBusInteracesMap& interfacesDict)
+    const dbus::utility::DBusInterfacesMap& interfacesDict)
 {
     // Get properties from Inventory.Item interface
 
diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index da37625..5860de6 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -83,7 +83,7 @@
     softwareInterfaceAdded(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                            sdbusplus::message_t& m, task::Payload&& payload)
 {
-    dbus::utility::DBusInteracesMap interfacesProperties;
+    dbus::utility::DBusInterfacesMap interfacesProperties;
 
     sdbusplus::message::object_path objPath;
 
@@ -330,7 +330,7 @@
     afterUpdateErrorMatcher(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                             const std::string& url, sdbusplus::message_t& m)
 {
-    dbus::utility::DBusInteracesMap interfacesProperties;
+    dbus::utility::DBusInterfacesMap interfacesProperties;
     sdbusplus::message::object_path objPath;
     m.read(objPath, interfacesProperties);
     BMCWEB_LOG_DEBUG("obj path = {}", objPath.str);
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index 195bc07..304fffa 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -87,7 +87,7 @@
     std::function<void(const std::string& service, const std::string& resName,
                        const std::shared_ptr<bmcweb::AsyncResp>&,
                        const std::pair<sdbusplus::message::object_path,
-                                       dbus::utility::DBusInteracesMap>&)>;
+                                       dbus::utility::DBusInterfacesMap>&)>;
 
 inline void
     findAndParseObject(const std::string& service, const std::string& resName,
@@ -150,7 +150,7 @@
  * @brief Read all known properties from VM object interfaces
  */
 inline void
-    vmParseInterfaceObject(const dbus::utility::DBusInteracesMap& interfaces,
+    vmParseInterfaceObject(const dbus::utility::DBusInterfacesMap& interfaces,
                            const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     for (const auto& [interface, values] : interfaces)
@@ -310,7 +310,7 @@
                    const std::string& resName,
                    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                    const std::pair<sdbusplus::message::object_path,
-                                   dbus::utility::DBusInteracesMap>& item)
+                                   dbus::utility::DBusInterfacesMap>& item)
 {
     VmMode mode = parseObjectPathAndGetMode(item.first, resName);
     if (mode == VmMode::Invalid)
