diff --git a/src/associations.cpp b/src/associations.cpp
index fc2703f..329f3d4 100644
--- a/src/associations.cpp
+++ b/src/associations.cpp
@@ -1,5 +1,7 @@
 #include "associations.hpp"
 
+#include "path.hpp"
+
 #include <boost/asio/steady_timer.hpp>
 #include <sdbusplus/exception.hpp>
 
@@ -268,11 +270,11 @@
 
         if (!forward.empty())
         {
-            objects[path + "/" + forward].emplace(objectPath);
+            objects[appendPathSegment(path, forward)].emplace(objectPath);
         }
         if (!reverse.empty())
         {
-            objects[objectPath + "/" + reverse].emplace(path);
+            objects[appendPathSegment(objectPath, reverse)].emplace(path);
         }
     }
     for (const auto& object : objects)
@@ -644,15 +646,19 @@
                               reverseType, owner, assocMaps);
 
         // Remove both sides of the association from assocMaps.ifaces
-        removeAssociationIfacesEntry(io, forwardPath + '/' + forwardType,
-                                     reversePath, assocMaps, server);
-        removeAssociationIfacesEntry(io, reversePath + '/' + reverseType,
-                                     forwardPath, assocMaps, server);
+        removeAssociationIfacesEntry(
+            io, appendPathSegment(forwardPath, forwardType), reversePath,
+            assocMaps, server);
+        removeAssociationIfacesEntry(
+            io, appendPathSegment(reversePath, reverseType), forwardPath,
+            assocMaps, server);
 
         // Remove both sides of the association from assocMaps.owners
-        removeAssociationOwnersEntry(forwardPath + '/' + forwardType,
-                                     reversePath, owner, assocMaps);
-        removeAssociationOwnersEntry(reversePath + '/' + reverseType,
-                                     forwardPath, owner, assocMaps);
+        removeAssociationOwnersEntry(
+            appendPathSegment(forwardPath, forwardType), reversePath, owner,
+            assocMaps);
+        removeAssociationOwnersEntry(
+            appendPathSegment(reversePath, reverseType), forwardPath, owner,
+            assocMaps);
     }
 }
diff --git a/src/handler.cpp b/src/handler.cpp
index 5575f2d..89c9913 100644
--- a/src/handler.cpp
+++ b/src/handler.cpp
@@ -1,5 +1,6 @@
 #include "handler.hpp"
 
+#include "path.hpp"
 #include "types.hpp"
 
 #include <xyz/openbmc_project/Common/error.hpp>
@@ -427,7 +428,8 @@
     for (const auto& subtreePath : subtreePaths)
     {
         // Form the association path
-        std::string associationPathStr = subtreePath + "/" + association;
+        std::string associationPathStr =
+            appendPathSegment(subtreePath, association);
         sdbusplus::message::object_path associationPath(associationPathStr);
 
         auto associatedSubTree =
@@ -453,7 +455,8 @@
     for (const auto& subtreePath : subtreePaths)
     {
         // Form the association path
-        std::string associationPathStr = subtreePath + "/" + association;
+        std::string associationPathStr =
+            appendPathSegment(subtreePath, association);
         sdbusplus::message::object_path associationPath(associationPathStr);
 
         auto associatedSubTree = getAssociatedSubTreePaths(
diff --git a/src/path.hpp b/src/path.hpp
new file mode 100644
index 0000000..f3bd2ce
--- /dev/null
+++ b/src/path.hpp
@@ -0,0 +1,10 @@
+#include <string>
+
+inline std::string appendPathSegment(const std::string& target,
+                                     const std::string& segment)
+{
+    std::string newPath;
+    newPath.reserve(target.size() + 1 + segment.size());
+    newPath.append(target).append("/").append(segment);
+    return newPath;
+}
