diff --git a/requester/mctp_endpoint_discovery.cpp b/requester/mctp_endpoint_discovery.cpp
index cbcf333..41ad909 100644
--- a/requester/mctp_endpoint_discovery.cpp
+++ b/requester/mctp_endpoint_discovery.cpp
@@ -60,13 +60,13 @@
     try
     {
         mapperResponse = pldm::utils::DBusHandler().getSubtree(
-            MCTPPath, 0, std::vector<std::string>({MCTPInterface}));
+            MCTPPath, 0, std::vector<std::string>({MCTPEndpoint::interface}));
     }
     catch (const sdbusplus::exception_t& e)
     {
         error(
             "Failed to getSubtree call at path '{PATH}' and interface '{INTERFACE}', error - {ERROR} ",
-            "ERROR", e, "PATH", MCTPPath, "INTERFACE", MCTPInterface);
+            "ERROR", e, "PATH", MCTPPath, "INTERFACE", MCTPEndpoint::interface);
         return;
     }
 
@@ -100,15 +100,19 @@
     try
     {
         auto properties = pldm::utils::DBusHandler().getDbusPropertiesVariant(
-            service.c_str(), path.c_str(), MCTPInterface);
+            service.c_str(), path.c_str(), MCTPEndpoint::interface);
 
-        if (properties.contains("NetworkId") && properties.contains("EID") &&
-            properties.contains("SupportedMessageTypes"))
+        if (properties.contains(MCTPEndpoint::property_names::network_id) &&
+            properties.contains(MCTPEndpoint::property_names::eid) &&
+            properties.contains(
+                MCTPEndpoint::property_names::supported_message_types))
         {
-            auto networkId = std::get<NetworkId>(properties.at("NetworkId"));
-            auto eid = std::get<mctp_eid_t>(properties.at("EID"));
-            auto types = std::get<std::vector<uint8_t>>(
-                properties.at("SupportedMessageTypes"));
+            auto networkId = std::get<NetworkId>(
+                properties.at(MCTPEndpoint::property_names::network_id));
+            auto eid = std::get<mctp_eid_t>(
+                properties.at(MCTPEndpoint::property_names::eid));
+            auto types = std::get<std::vector<uint8_t>>(properties.at(
+                MCTPEndpoint::property_names::supported_message_types));
             return MctpEndpointProps(networkId, eid, types);
         }
     }
@@ -208,17 +212,19 @@
 
     for (const auto& [intfName, properties] : interfaces)
     {
-        if (intfName == MCTPInterface)
+        if (intfName == MCTPEndpoint::interface)
         {
-            if (properties.contains("NetworkId") &&
-                properties.contains("EID") &&
-                properties.contains("SupportedMessageTypes"))
+            if (properties.contains(MCTPEndpoint::property_names::network_id) &&
+                properties.contains(MCTPEndpoint::property_names::eid) &&
+                properties.contains(
+                    MCTPEndpoint::property_names::supported_message_types))
             {
-                auto networkId =
-                    std::get<NetworkId>(properties.at("NetworkId"));
-                auto eid = std::get<mctp_eid_t>(properties.at("EID"));
-                auto types = std::get<std::vector<uint8_t>>(
-                    properties.at("SupportedMessageTypes"));
+                auto networkId = std::get<NetworkId>(
+                    properties.at(MCTPEndpoint::property_names::network_id));
+                auto eid = std::get<mctp_eid_t>(
+                    properties.at(MCTPEndpoint::property_names::eid));
+                auto types = std::get<std::vector<uint8_t>>(properties.at(
+                    MCTPEndpoint::property_names::supported_message_types));
 
                 if (!availability)
                 {
@@ -310,8 +316,8 @@
 
         if (key == MCTPConnectivityProp)
         {
-            service = pldm::utils::DBusHandler().getService(objPath.c_str(),
-                                                            MCTPInterface);
+            service = pldm::utils::DBusHandler().getService(
+                objPath.c_str(), MCTPEndpoint::interface);
             const MctpEndpointProps& epProps =
                 getMctpEndpointProps(service, objPath);
 
