diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index 7da9100..976d043 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -26,13 +26,13 @@
 #include "registries/openbmc_message_registry.hpp"
 #include "registries/task_event_message_registry.hpp"
 #include "server_sent_events.hpp"
+#include "str_utility.hpp"
 #include "utility.hpp"
 #include "utils/json_utils.hpp"
 
 #include <sys/inotify.h>
 
 #include <boost/algorithm/string/classification.hpp>
-#include <boost/algorithm/string/split.hpp>
 #include <boost/asio/io_context.hpp>
 #include <boost/container/flat_map.hpp>
 #include <sdbusplus/bus/match.hpp>
@@ -121,7 +121,8 @@
     // the right Message
     std::vector<std::string> fields;
     fields.reserve(4);
-    boost::split(fields, messageID, boost::is_any_of("."));
+
+    bmcweb::split(fields, messageID, '.');
     if (fields.size() != 4)
     {
         return nullptr;
@@ -189,8 +190,7 @@
     entry.remove_prefix(entryStart);
     // Use split to separate the entry into its fields
     std::vector<std::string> logEntryFields;
-    boost::split(logEntryFields, entry, boost::is_any_of(","),
-                 boost::token_compress_on);
+    bmcweb::split(logEntryFields, entry, ',');
     // We need at least a MessageId to be valid
     if (logEntryFields.empty())
     {
@@ -222,7 +222,7 @@
     // the right Message
     std::vector<std::string> fields;
     fields.reserve(4);
-    boost::split(fields, messageID, boost::is_any_of("."));
+    bmcweb::split(fields, messageID, '.');
     if (fields.size() == 4)
     {
         registryName = fields[0];
@@ -301,8 +301,9 @@
                     sseFilter.end());
 
     std::vector<std::string> result;
-    boost::split(result, sseFilter, boost::is_any_of(" "),
-                 boost::token_compress_on);
+
+    // NOLINTNEXTLINE
+    bmcweb::split(result, sseFilter, ' ');
 
     BMCWEB_LOG_DEBUG << "No of tokens in SEE query: " << result.size();
 
diff --git a/redfish-core/include/utils/query_param.hpp b/redfish-core/include/utils/query_param.hpp
index bfe1001..9c38248 100644
--- a/redfish-core/include/utils/query_param.hpp
+++ b/redfish-core/include/utils/query_param.hpp
@@ -7,11 +7,11 @@
 #include "http_request.hpp"
 #include "http_response.hpp"
 #include "logging.hpp"
+#include "str_utility.hpp"
 
 #include <sys/types.h>
 
 #include <boost/algorithm/string/classification.hpp>
-#include <boost/algorithm/string/split.hpp>
 #include <boost/beast/http/message.hpp> // IWYU pragma: keep
 #include <boost/beast/http/status.hpp>
 #include <boost/beast/http/verb.hpp>
@@ -351,7 +351,7 @@
 inline bool getSelectParam(std::string_view value, Query& query)
 {
     std::vector<std::string> properties;
-    boost::split(properties, value, boost::is_any_of(","));
+    bmcweb::split(properties, value, ',');
     if (properties.empty())
     {
         return false;
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index ef1652b..89c38b0 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -98,7 +98,7 @@
     // the right Message
     std::vector<std::string> fields;
     fields.reserve(4);
-    boost::split(fields, messageID, boost::is_any_of("."));
+    bmcweb::split(fields, messageID, '.');
     const std::string& registryName = fields[0];
     const std::string& messageKey = fields[3];
 
@@ -1238,8 +1238,7 @@
     entry.remove_prefix(entryStart);
     // Use split to separate the entry into its fields
     std::vector<std::string> logEntryFields;
-    boost::split(logEntryFields, entry, boost::is_any_of(","),
-                 boost::token_compress_on);
+    bmcweb::split(logEntryFields, entry, ',');
     // We need at least a MessageId to be valid
     if (logEntryFields.empty())
     {
@@ -3616,7 +3615,7 @@
                                  uint64_t& currentValue, uint16_t& index)
 {
     std::vector<std::string> split;
-    boost::algorithm::split(split, postCodeID, boost::is_any_of("-"));
+    bmcweb::split(split, postCodeID, '-');
     if (split.size() != 2 || split[0].length() < 2 || split[0].front() != 'B')
     {
         return false;
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 6be9e86..e6d7a7a 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -21,6 +21,7 @@
 #include "generated/enums/sensor.hpp"
 #include "query.hpp"
 #include "registries/privilege_registry.hpp"
+#include "str_utility.hpp"
 #include "utils/dbus_utils.hpp"
 #include "utils/json_utils.hpp"
 #include "utils/query_param.hpp"
@@ -29,7 +30,6 @@
 #include <boost/algorithm/string/find.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
-#include <boost/algorithm/string/split.hpp>
 #include <boost/range/algorithm/replace_copy_if.hpp>
 #include <boost/system/error_code.hpp>
 #include <sdbusplus/asio/property.hpp>
@@ -2281,14 +2281,15 @@
                 // Reserve space for
                 // /xyz/openbmc_project/sensors/<name>/<subname>
                 split.reserve(6);
-                boost::algorithm::split(split, objPath, boost::is_any_of("/"));
+                // NOLINTNEXTLINE
+                bmcweb::split(split, objPath, '/');
                 if (split.size() < 6)
                 {
                     BMCWEB_LOG_ERROR << "Got path that isn't long enough "
                                      << objPath;
                     continue;
                 }
-                // These indexes aren't intuitive, as boost::split puts an empty
+                // These indexes aren't intuitive, as split puts an empty
                 // string at the beginning
                 const std::string& sensorType = split[4];
                 const std::string& sensorName = split[5];
