diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index cc6aa12..a6a5795 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -311,7 +311,7 @@
         {
             continue; // handled elsewhere
         }
-        std::string key = jsonPointerPath + "/" + dictPair.key();
+        std::string path = jsonPointerPath + "/" + dictPair.key();
         if (permission == sdbusplus::asio::PropertyPermission::readWrite)
         {
             // all setable numbers are doubles as it is difficult to always
@@ -340,13 +340,13 @@
                     // sdbusplus, change it to numbers
                     addArrayToDbus<uint64_t>(dictPair.key(), dictPair.value(),
                                              iface.get(), permission,
-                                             systemConfiguration, key);
+                                             systemConfiguration, path);
                 }
 
                 else
                 {
                     addProperty(dictPair.key(), dictPair.value().get<bool>(),
-                                iface.get(), systemConfiguration, key,
+                                iface.get(), systemConfiguration, path,
                                 permission);
                 }
                 break;
@@ -357,12 +357,12 @@
                 {
                     addArrayToDbus<int64_t>(dictPair.key(), dictPair.value(),
                                             iface.get(), permission,
-                                            systemConfiguration, key);
+                                            systemConfiguration, path);
                 }
                 else
                 {
                     addProperty(dictPair.key(), dictPair.value().get<int64_t>(),
-                                iface.get(), systemConfiguration, key,
+                                iface.get(), systemConfiguration, path,
                                 sdbusplus::asio::PropertyPermission::readOnly);
                 }
                 break;
@@ -373,13 +373,13 @@
                 {
                     addArrayToDbus<uint64_t>(dictPair.key(), dictPair.value(),
                                              iface.get(), permission,
-                                             systemConfiguration, key);
+                                             systemConfiguration, path);
                 }
                 else
                 {
                     addProperty(dictPair.key(),
                                 dictPair.value().get<uint64_t>(), iface.get(),
-                                systemConfiguration, key,
+                                systemConfiguration, path,
                                 sdbusplus::asio::PropertyPermission::readOnly);
                 }
                 break;
@@ -390,13 +390,13 @@
                 {
                     addArrayToDbus<double>(dictPair.key(), dictPair.value(),
                                            iface.get(), permission,
-                                           systemConfiguration, key);
+                                           systemConfiguration, path);
                 }
 
                 else
                 {
                     addProperty(dictPair.key(), dictPair.value().get<double>(),
-                                iface.get(), systemConfiguration, key,
+                                iface.get(), systemConfiguration, path,
                                 permission);
                 }
                 break;
@@ -407,13 +407,13 @@
                 {
                     addArrayToDbus<std::string>(
                         dictPair.key(), dictPair.value(), iface.get(),
-                        permission, systemConfiguration, key);
+                        permission, systemConfiguration, path);
                 }
                 else
                 {
                     addProperty(
                         dictPair.key(), dictPair.value().get<std::string>(),
-                        iface.get(), systemConfiguration, key, permission);
+                        iface.get(), systemConfiguration, path, permission);
                 }
                 break;
             }
