diff --git a/libmapper/app.c b/libmapper/app.c
index 84be79d..c8b4f20 100644
--- a/libmapper/app.c
+++ b/libmapper/app.c
@@ -13,8 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "config.h"
-
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/libmapper/mapper.c b/libmapper/mapper.c
index 3c43eb9..4a38790 100644
--- a/libmapper/mapper.c
+++ b/libmapper/mapper.c
@@ -13,8 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "config.h"
-
 #include "mapper.h"
 
 #include <errno.h>
@@ -160,10 +158,11 @@
     mapper_async_wait* wait = data->wait;
 
     sd_event_source_unref(data->event_source);
-    r = sd_bus_call_method_async(wait->conn, NULL, MAPPER_BUSNAME, MAPPER_PATH,
-                                 MAPPER_INTERFACE, "GetObject",
-                                 async_wait_getobject_callback, data, "sas",
-                                 data->path, 0, NULL);
+    r = sd_bus_call_method_async(
+        wait->conn, NULL, "xyz.openbmc_project.ObjectMapper",
+        "/xyz/openbmc_project/object_mapper",
+        "xyz.openbmc_project.ObjectMapper", "GetObject",
+        async_wait_getobject_callback, data, "sas", data->path, 0, NULL);
     if (r < 0)
     {
         async_wait_done(r, wait);
@@ -250,10 +249,11 @@
         data->path = wait->objs[i];
         data->retry = 0;
         data->event_source = NULL;
-        r = sd_bus_call_method_async(wait->conn, NULL, MAPPER_BUSNAME,
-                                     MAPPER_PATH, MAPPER_INTERFACE, "GetObject",
-                                     async_wait_getobject_callback, data, "sas",
-                                     wait->objs[i], 0, NULL);
+        r = sd_bus_call_method_async(
+            wait->conn, NULL, "xyz.openbmc_project.ObjectMapper",
+            "/xyz/openbmc_project/object_mapper",
+            "xyz.openbmc_project.ObjectMapper", "GetObject",
+            async_wait_getobject_callback, data, "sas", wait->objs[i], 0, NULL);
         if (r < 0)
         {
             free(data);
@@ -406,9 +406,11 @@
 
     sd_event_source_unref(subtree->event_source);
     r = sd_bus_call_method_async(
-        subtree->conn, NULL, MAPPER_BUSNAME, MAPPER_PATH, MAPPER_INTERFACE,
-        "GetSubTreePaths", async_subtree_getpaths_callback, subtree, "sias",
-        subtree->namespace, 0, 1, subtree->interface);
+        subtree->conn, NULL, "xyz.openbmc_project.ObjectMapper",
+        "/xyz/openbmc_project/object_mapper",
+        "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths",
+        async_subtree_getpaths_callback, subtree, "sias", subtree->namespace, 0,
+        1, subtree->interface);
     if (r < 0)
         async_subtree_done(r, subtree);
 
@@ -499,9 +501,11 @@
     subtree->retry = 0;
     subtree->event_source = NULL;
     r = sd_bus_call_method_async(
-        subtree->conn, NULL, MAPPER_BUSNAME, MAPPER_PATH, MAPPER_INTERFACE,
-        "GetSubTreePaths", async_subtree_getpaths_callback, subtree, "sias",
-        subtree->namespace, 0, 1, subtree->interface);
+        subtree->conn, NULL, "xyz.openbmc_project.ObjectMapper",
+        "/xyz/openbmc_project/object_mapper",
+        "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths",
+        async_subtree_getpaths_callback, subtree, "sias", subtree->namespace, 0,
+        1, subtree->interface);
     if (r < 0)
     {
         fprintf(stderr, "Error invoking method: %s\n", strerror(-r));
@@ -602,9 +606,10 @@
     sd_bus_message* request = NULL;
     int r, retry = 0;
 
-    r = sd_bus_message_new_method_call(conn, &request, MAPPER_BUSNAME,
-                                       MAPPER_PATH, MAPPER_INTERFACE,
-                                       "GetObject");
+    r = sd_bus_message_new_method_call(
+        conn, &request, "xyz.openbmc_project.ObjectMapper",
+        "/xyz/openbmc_project/object_mapper",
+        "xyz.openbmc_project.ObjectMapper", "GetObject");
     if (r < 0)
         goto exit;
 
diff --git a/meson.build b/meson.build
index ef744e6..abad426 100644
--- a/meson.build
+++ b/meson.build
@@ -45,12 +45,6 @@
     subdir('libmapper/test')
 endif
 
-conf = configuration_data()
-conf.set_quoted('MAPPER_BUSNAME', 'xyz.openbmc_project.ObjectMapper')
-conf.set_quoted('MAPPER_INTERFACE', 'xyz.openbmc_project.ObjectMapper')
-conf.set_quoted('MAPPER_PATH', '/xyz/openbmc_project/object_mapper')
-configure_file(output: 'config.h', configuration: conf)
-
 install_headers('libmapper/mapper.h')
 
 libmapper = library(
diff --git a/src/main.cpp b/src/main.cpp
index 37f216f..d4709b4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,5 +1,3 @@
-#include "config.h"
-
 #include "associations.hpp"
 #include "processing.hpp"
 #include "src/argument.hpp"
@@ -76,8 +74,8 @@
     // introspect right now.  Find out how to register signals in
     // sdbusplus
     sdbusplus::message::message m = system_bus->new_signal(
-        MAPPER_PATH, "xyz.openbmc_project.ObjectMapper.Private",
-        "IntrospectionComplete");
+        "/xyz/openbmc_project/object_mapper",
+        "xyz.openbmc_project.ObjectMapper.Private", "IntrospectionComplete");
     m.append(process_name);
     m.signal_send();
 }
@@ -590,7 +588,7 @@
                     // association path.
                     if ((connection_map->second.size() == 1) &&
                         (connection_map->second.begin()->first ==
-                         MAPPER_BUSNAME))
+                         "xyz.openbmc_project.ObjectMapper"))
                     {
                         // Remove the 2 association D-Bus paths and move the
                         // association to pending.
@@ -647,7 +645,8 @@
         associationChangedHandler);
 
     std::shared_ptr<sdbusplus::asio::dbus_interface> iface =
-        server.add_interface(MAPPER_PATH, MAPPER_INTERFACE);
+        server.add_interface("/xyz/openbmc_project/object_mapper",
+                             "xyz.openbmc_project.ObjectMapper");
 
     iface->register_method(
         "GetAncestors", [&interface_map](std::string& req_path,
@@ -857,7 +856,7 @@
                     associationMaps, server);
     });
 
-    system_bus->request_name(MAPPER_BUSNAME);
+    system_bus->request_name("xyz.openbmc_project.ObjectMapper");
 
     io.run();
 }
diff --git a/src/processing.cpp b/src/processing.cpp
index 229f417..f144b77 100644
--- a/src/processing.cpp
+++ b/src/processing.cpp
@@ -1,5 +1,3 @@
-#include "config.h"
-
 #include "processing.hpp"
 
 #include <boost/algorithm/string/predicate.hpp>
@@ -77,7 +75,8 @@
             // we own this path as well, which would be because of an
             // association.
             if ((pathIt->second.size() == 2) &&
-                (pathIt->second.find(MAPPER_BUSNAME) != pathIt->second.end()))
+                (pathIt->second.find("xyz.openbmc_project.ObjectMapper") !=
+                 pathIt->second.end()))
             {
                 // Remove the 2 association D-Bus paths and move the
                 // association to pending.
