diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index a20f36a..eb076c9 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -36,6 +36,7 @@
 #include <ctime>
 #include <fstream>
 #include <memory>
+#include <span>
 #include <variant>
 
 namespace redfish
@@ -52,22 +53,22 @@
 
 namespace message_registries
 {
-inline boost::beast::span<const MessageEntry>
+inline std::span<const MessageEntry>
     getRegistryFromPrefix(const std::string& registryName)
 {
     if (task_event::header.registryPrefix == registryName)
     {
-        return boost::beast::span<const MessageEntry>(task_event::registry);
+        return {task_event::registry};
     }
     if (openbmc::header.registryPrefix == registryName)
     {
-        return boost::beast::span<const MessageEntry>(openbmc::registry);
+        return {openbmc::registry};
     }
     if (base::header.registryPrefix == registryName)
     {
-        return boost::beast::span<const MessageEntry>(base::registry);
+        return {base::registry};
     }
-    return boost::beast::span<const MessageEntry>(openbmc::registry);
+    return {openbmc::registry};
 }
 } // namespace message_registries
 
@@ -89,14 +90,14 @@
 {
 static const Message*
     getMsgFromRegistry(const std::string& messageKey,
-                       const boost::beast::span<const MessageEntry>& registry)
+                       const std::span<const MessageEntry>& registry)
 {
-    boost::beast::span<const MessageEntry>::const_iterator messageIt =
-        std::find_if(registry.cbegin(), registry.cend(),
+    std::span<const MessageEntry>::iterator messageIt =
+        std::find_if(registry.begin(), registry.end(),
                      [&messageKey](const MessageEntry& messageEntry) {
                          return !messageKey.compare(messageEntry.first);
                      });
-    if (messageIt != registry.cend())
+    if (messageIt != registry.end())
     {
         return &messageIt->second;
     }
diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp
index d273aea..da9a165 100644
--- a/redfish-core/lib/event_service.hpp
+++ b/redfish-core/lib/event_service.hpp
@@ -416,13 +416,13 @@
                         // Check for Message ID in each of the selected Registry
                         for (const std::string& it : registryPrefix)
                         {
-                            const boost::beast::span<
+                            const std::span<
                                 const redfish::message_registries::MessageEntry>
                                 registry = redfish::message_registries::
                                     getRegistryFromPrefix(it);
 
                             if (std::any_of(
-                                    registry.cbegin(), registry.cend(),
+                                    registry.begin(), registry.end(),
                                     [&id](const redfish::message_registries::
                                               MessageEntry& messageEntry) {
                                         return !id.compare(messageEntry.first);
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index 65b12f3..f71f81b 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -39,6 +39,7 @@
 #include <charconv>
 #include <filesystem>
 #include <optional>
+#include <span>
 #include <string_view>
 #include <variant>
 
@@ -57,17 +58,16 @@
 
 namespace message_registries
 {
-static const Message* getMessageFromRegistry(
-    const std::string& messageKey,
-    const boost::beast::span<const MessageEntry> registry)
+static const Message*
+    getMessageFromRegistry(const std::string& messageKey,
+                           const std::span<const MessageEntry> registry)
 {
-    boost::beast::span<const MessageEntry>::const_iterator messageIt =
-        std::find_if(registry.cbegin(), registry.cend(),
-                     [&messageKey](const MessageEntry& messageEntry) {
-                         return !std::strcmp(messageEntry.first,
-                                             messageKey.c_str());
-                     });
-    if (messageIt != registry.cend())
+    std::span<const MessageEntry>::iterator messageIt = std::find_if(
+        registry.begin(), registry.end(),
+        [&messageKey](const MessageEntry& messageEntry) {
+            return !std::strcmp(messageEntry.first, messageKey.c_str());
+        });
+    if (messageIt != registry.end())
     {
         return &messageIt->second;
     }
@@ -90,13 +90,12 @@
     if (std::string(base::header.registryPrefix) == registryName)
     {
         return getMessageFromRegistry(
-            messageKey, boost::beast::span<const MessageEntry>(base::registry));
+            messageKey, std::span<const MessageEntry>(base::registry));
     }
     if (std::string(openbmc::header.registryPrefix) == registryName)
     {
         return getMessageFromRegistry(
-            messageKey,
-            boost::beast::span<const MessageEntry>(openbmc::registry));
+            messageKey, std::span<const MessageEntry>(openbmc::registry));
     }
     return nullptr;
 }
@@ -1135,7 +1134,7 @@
     }
 
     // Get the MessageArgs from the log if there are any
-    boost::beast::span<std::string> messageArgs;
+    std::span<std::string> messageArgs;
     if (logEntryFields.size() > 1)
     {
         std::string& messageArgsStart = logEntryFields[1];
