diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index 6b08e4c..8c62edd 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -35,6 +35,7 @@
       'sources': [
         'data_encoding.cc',
         'dbus_manager.cc',
+        'dbus_constants.cc',
         'http_request.cc',
         'http_transport_curl.cc',
         'http_utils.cc',
@@ -57,6 +58,7 @@
       'type': 'executable',
       'sources': [
         'buffet_client.cc',
+        'dbus_constants.cc',
       ],
     },
     {
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 83d5f9c..f7072ff 100755
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -10,6 +10,7 @@
 #include <dbus/object_proxy.h>
 #include <gflags/gflags.h>
 
+#include "buffet/dbus_constants.h"
 #include "buffet/dbus_manager.h"
 
 DEFINE_bool(testmethod, false, "Call the Buffet Test Method.");
@@ -18,14 +19,14 @@
 
 dbus::ObjectProxy* GetBuffetDBusProxy(dbus::Bus *bus) {
   return bus->GetObjectProxy(
-      buffet::kBuffetServiceName,
-      dbus::ObjectPath(buffet::kBuffetServicePath));
+      buffet::dbus_constants::kServiceName,
+      dbus::ObjectPath(buffet::dbus_constants::kRootServicePath));
 }
 
 void CallTestMethod(dbus::ObjectProxy* proxy) {
   int timeout_ms = 1000;
-  dbus::MethodCall method_call(buffet::kBuffetInterface,
-                               buffet::kTestMethod);
+  dbus::MethodCall method_call(buffet::dbus_constants::kRootInterface,
+                               buffet::dbus_constants::kRootTestMethod);
   scoped_ptr<dbus::Response> response(proxy->CallMethodAndBlock(&method_call,
                                                                 timeout_ms));
   if (!response) {
diff --git a/buffet/dbus_constants.cc b/buffet/dbus_constants.cc
new file mode 100644
index 0000000..701f387
--- /dev/null
+++ b/buffet/dbus_constants.cc
@@ -0,0 +1,20 @@
+// Copyright 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "buffet/dbus_constants.h"
+
+namespace buffet {
+
+namespace dbus_constants {
+
+const char kServiceName[] = "org.chromium.Buffet";
+
+const char kRootInterface[] = "org.chromium.Buffet";
+const char kRootServicePath[] = "/org/chromium/Buffet";
+
+const char kRootTestMethod[] = "TestMethod";
+
+}  // namespace dbus_constants
+
+}  // namespace buffet
diff --git a/buffet/dbus_constants.h b/buffet/dbus_constants.h
new file mode 100644
index 0000000..1317ab4
--- /dev/null
+++ b/buffet/dbus_constants.h
@@ -0,0 +1,26 @@
+// Copyright 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BUFFET_DBUS_CONSTANTS_H_
+#define BUFFET_DBUS_CONSTANTS_H_
+
+namespace buffet {
+
+namespace dbus_constants {
+
+// The service name claimed by the Buffet daemon.
+extern const char kServiceName[];
+
+// Interface implemented by the object at kRootServicePath.
+extern const char kRootInterface[];
+extern const char kRootServicePath[];
+
+// Methods exposed as part of kRootInterface.
+extern const char kRootTestMethod[];
+
+}  // namespace dbus_constants
+
+}  // namespace buffet
+
+#endif  // BUFFET_DBUS_CONSTANTS_H_
diff --git a/buffet/dbus_manager.cc b/buffet/dbus_manager.cc
index c6031fc..ceddee1 100644
--- a/buffet/dbus_manager.cc
+++ b/buffet/dbus_manager.cc
@@ -8,6 +8,10 @@
 
 #include <base/bind.h>
 
+#include "buffet/dbus_constants.h"
+
+using ::std::string;
+
 namespace buffet {
 
 namespace {
@@ -29,8 +33,7 @@
 }  // namespace
 
 DBusManager::DBusManager()
-    : bus_(nullptr),
-      buffet_dbus_object_(nullptr) {}
+    : bus_(nullptr) {}
 
 DBusManager::~DBusManager() {}
 
@@ -49,26 +52,36 @@
   bus_ = new dbus::Bus(options);
   CHECK(bus_->Connect());
 
-  buffet_dbus_object_ = bus_->GetExportedObject(
-      dbus::ObjectPath(kBuffetServicePath));
-  ExportDBusMethod(kTestMethod, &DBusManager::HandleTestMethod);
+  // buffet_dbus_object is owned by the Bus.
+  auto buffet_dbus_object = GetExportedObject(dbus_constants::kRootServicePath);
+  ExportDBusMethod(
+      buffet_dbus_object,
+      dbus_constants::kRootInterface, dbus_constants::kRootTestMethod,
+      base::Bind(&DBusManager::HandleTestMethod, base::Unretained(this)));
 
-  CHECK(bus_->RequestOwnershipAndBlock(kBuffetServiceName,
+  CHECK(bus_->RequestOwnershipAndBlock(dbus_constants::kServiceName,
                                        dbus::Bus::REQUIRE_PRIMARY))
-      << "Unable to take ownership of " << kBuffetServiceName;
+      << "Unable to take ownership of " << dbus_constants::kServiceName;
 }
 
 void DBusManager::ShutDownDBus() {
   bus_->ShutdownAndBlock();
 }
 
-void DBusManager::ExportDBusMethod(const std::string& method_name,
-                              DBusMethodCallMemberFunction member) {
-  DCHECK(buffet_dbus_object_);
-  CHECK(buffet_dbus_object_->ExportMethodAndBlock(
-      kBuffetInterface, method_name,
-      base::Bind(&HandleSynchronousDBusMethodCall,
-                 base::Bind(member, base::Unretained(this)))));
+dbus::ExportedObject* DBusManager::GetExportedObject(
+    const string& object_path) {
+  return bus_->GetExportedObject(dbus::ObjectPath(object_path));
+}
+
+void DBusManager::ExportDBusMethod(
+    dbus::ExportedObject* exported_object,
+    const string& interface_name,
+    const string& method_name,
+    base::Callback<scoped_ptr<dbus::Response>(dbus::MethodCall*)> handler) {
+  DCHECK(exported_object);
+  CHECK(exported_object->ExportMethodAndBlock(
+      interface_name, method_name,
+      base::Bind(&HandleSynchronousDBusMethodCall, handler)));
 }
 
 scoped_ptr<dbus::Response> DBusManager::HandleTestMethod(
diff --git a/buffet/dbus_manager.h b/buffet/dbus_manager.h
index da91391..a990ead 100644
--- a/buffet/dbus_manager.h
+++ b/buffet/dbus_manager.h
@@ -14,21 +14,6 @@
 
 namespace buffet {
 
-// TODO(sosa): Move to chromeos/system_api once we're ready.
-const char kBuffetInterface[] = "org.chromium.Buffet";
-const char kBuffetServicePath[] = "/org/chromium/Buffet";
-const char kBuffetServiceName[] = "org.chromium.Buffet";
-
-// Methods exposed by buffet.
-const char kTestMethod[] = "TestMethod";
-
-class DBusManager;
-
-// Pointer to a member function for handling D-Bus method calls. If an empty
-// scoped_ptr is returned, an empty (but successful) response will be sent.
-typedef scoped_ptr<dbus::Response> (DBusManager::*DBusMethodCallMemberFunction)(
-    dbus::MethodCall*);
-
 // Class that manages dbus interactions in buffet.
 class DBusManager {
  public:
@@ -38,20 +23,30 @@
   void Init();
   void Finalize();
 
+  // Get an object owned by the ::dbus::Bus object.  This object
+  // has methods to export DBus facing methods.
+  ::dbus::ExportedObject* GetExportedObject(
+      const std::string& object_path);
+
+  // Exports |method_name| on |exported_object| and uses |member|
+  // to handle calls.
+  void ExportDBusMethod(
+      ::dbus::ExportedObject* exported_object,
+      const std::string& interface_name,
+      const std::string& method_name,
+      base::Callback<scoped_ptr<::dbus::Response>(
+          ::dbus::MethodCall*)> handler);
+
  private:
   // Connects to the D-Bus system bus and exports methods.
   void InitDBus();
   void ShutDownDBus();
 
-  // Exports |method_name| and uses |member| to handle calls.
-  void ExportDBusMethod(const std::string& method_name,
-                        DBusMethodCallMemberFunction member);
-
   // Callbacks for handling D-Bus signals and method calls.
-  scoped_ptr<dbus::Response> HandleTestMethod(dbus::MethodCall* method_call);
+  scoped_ptr<::dbus::Response> HandleTestMethod(
+      ::dbus::MethodCall* method_call);
 
-  scoped_refptr<dbus::Bus> bus_;
-  dbus::ExportedObject* buffet_dbus_object_;  // weak; owned by |bus_|
+  scoped_refptr<::dbus::Bus> bus_;
 
   DISALLOW_COPY_AND_ASSIGN(DBusManager);
 };
