diff --git a/oemhandler.cpp b/oemhandler.cpp
index 80ea42e..9623b97 100644
--- a/oemhandler.cpp
+++ b/oemhandler.cpp
@@ -83,8 +83,10 @@
 std::string getService(sdbusplus::bus_t& bus, const std::string& path,
                        const std::string& interface)
 {
-    auto method = bus.new_method_call(MAPPER_BUS_NAME, MAPPER_OBJ, MAPPER_IFACE,
-                                      "GetObject");
+    auto method =
+        bus.new_method_call("xyz.openbmc_project.ObjectMapper",
+                            "/xyz/openbmc_project/object_mapper",
+                            "xyz.openbmc_project.ObjectMapper", "GetObject");
 
     method.append(path);
     method.append(std::vector<std::string>({interface}));
@@ -228,8 +230,10 @@
 // storage.  Likely via the ipmi add_sel command.
 ///////////////////////////////////////////////////////////////////////////////
 ipmi_ret_t ipmi_ibm_oem_partial_esel(
-    ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
-    ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context)
+    [[maybe_unused]] ipmi_netfn_t netfn, [[maybe_unused]] ipmi_cmd_t cmd,
+    [[maybe_unused]] ipmi_request_t request,
+    [[maybe_unused]] ipmi_response_t response, ipmi_data_len_t data_len,
+    [[maybe_unused]] ipmi_context_t context)
 {
     uint8_t* reqptr = (uint8_t*)request;
     esel_request_t esel_req;
@@ -318,8 +322,10 @@
 // Prepare for FW Update.
 // Execute needed commands to prepare the system for a fw update from the host.
 ipmi_ret_t ipmi_ibm_oem_prep_fw_update(
-    ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
-    ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context)
+    [[maybe_unused]] ipmi_netfn_t netfn, [[maybe_unused]] ipmi_cmd_t cmd,
+    [[maybe_unused]] ipmi_request_t request,
+    [[maybe_unused]] ipmi_response_t response, ipmi_data_len_t data_len,
+    [[maybe_unused]] ipmi_context_t context)
 {
     ipmi_ret_t ipmi_rc = IPMI_CC_OK;
     *data_len = 0;
@@ -357,8 +363,11 @@
 }
 
 ipmi_ret_t ipmi_ibm_oem_bmc_factory_reset(
-    ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
-    ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context)
+    [[maybe_unused]] ipmi_netfn_t netfn, [[maybe_unused]] ipmi_cmd_t cmd,
+    [[maybe_unused]] ipmi_request_t request,
+    [[maybe_unused]] ipmi_response_t response,
+    [[maybe_unused]] ipmi_data_len_t data_len,
+    [[maybe_unused]] ipmi_context_t context)
 {
     sdbusplus::bus_t bus{ipmid_get_sd_bus_connection()};
 
@@ -449,12 +458,13 @@
                            ipmi_ibm_oem_bmc_factory_reset, SYSTEM_INTERFACE);
 
     // Create new object on the bus
-    auto objPath = std::string{CONTROL_HOST_OBJ_MGR} + '/' + HOST_NAME + '0';
+    auto objPath = std::string{"/org/open_power/control"} + '/' + HOST_NAME +
+                   '0';
 
     // Add sdbusplus ObjectManager.
     auto& sdbusPlusHandler = ipmid_get_sdbus_plus_handler();
     objManager = std::make_unique<sdbusplus::server::manager_t>(
-        *sdbusPlusHandler, CONTROL_HOST_OBJ_MGR);
+        *sdbusPlusHandler, "/org/open_power/control");
 
     opHost = std::make_unique<open_power::host::command::Host>(
         *sdbusPlusHandler, objPath.c_str());
