diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index ed036bd..3a62f13 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -29,7 +29,6 @@
       'sources': [
         'data_encoding.cc',
         'dbus_constants.cc',
-        'dbus_manager.cc',
         'dbus_utils.cc',
         'device_registration_info.cc',
         'exported_object_manager.cc',
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index dba2f4d..f351040 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -16,7 +16,6 @@
 #include <dbus/values_util.h>
 
 #include "buffet/dbus_constants.h"
-#include "buffet/dbus_manager.h"
 #include "buffet/data_encoding.h"
 
 using namespace buffet::dbus_constants;
@@ -32,8 +31,8 @@
 }
 
 bool CallTestMethod(dbus::ObjectProxy* proxy) {
-  dbus::MethodCall method_call(buffet::dbus_constants::kRootInterface,
-                               buffet::dbus_constants::kRootTestMethod);
+  dbus::MethodCall method_call(buffet::dbus_constants::kManagerInterface,
+                               buffet::dbus_constants::kManagerTestMethod);
   scoped_ptr<dbus::Response> response(
     proxy->CallMethodAndBlock(&method_call, default_timeout_ms));
   if (!response) {
@@ -178,7 +177,7 @@
 
 void usage() {
   std::cerr << "Possible commands:" << std::endl;
-  std::cerr << "  " << kRootTestMethod << std::endl;
+  std::cerr << "  " << kManagerTestMethod << std::endl;
   std::cerr << "  " << kManagerCheckDeviceRegistered << std::endl;
   std::cerr << "  " << kManagerGetDeviceInfo << std::endl;
   std::cerr << "  " << kManagerStartRegisterDevice
@@ -208,9 +207,9 @@
   std::string command = args.front();
   args.erase(args.begin());
   bool success = false;
-  if (command.compare(kRootTestMethod) == 0) {
+  if (command.compare(kManagerTestMethod) == 0) {
     auto proxy = GetBuffetDBusProxy(
-        bus, buffet::dbus_constants::kRootServicePath);
+        bus, buffet::dbus_constants::kManagerServicePath);
     success = CallTestMethod(proxy);
   } else if (command.compare(kManagerCheckDeviceRegistered) == 0 ||
              command.compare("cr") == 0) {
diff --git a/buffet/dbus_constants.cc b/buffet/dbus_constants.cc
index f352bbe..d8c70ba 100644
--- a/buffet/dbus_constants.cc
+++ b/buffet/dbus_constants.cc
@@ -10,11 +10,8 @@
 
 const char kServiceName[] = "org.chromium.Buffet";
 
-const char kRootInterface[] = "org.chromium.Buffet";
 const char kRootServicePath[] = "/org/chromium/Buffet";
 
-const char kRootTestMethod[] = "TestMethod";
-
 const char kManagerInterface[] = "org.chromium.Buffet.Manager";
 const char kManagerServicePath[] = "/org/chromium/Buffet/Manager";
 
@@ -23,6 +20,7 @@
 const char kManagerStartRegisterDevice[]    = "StartRegisterDevice";
 const char kManagerFinishRegisterDevice[]   = "FinishRegisterDevice";
 const char kManagerUpdateStateMethod[]      = "UpdateState";
+const char kManagerTestMethod[]             = "TestMethod";
 
 }  // namespace dbus_constants
 
diff --git a/buffet/dbus_constants.h b/buffet/dbus_constants.h
index 13c8a71..b7e9239 100644
--- a/buffet/dbus_constants.h
+++ b/buffet/dbus_constants.h
@@ -12,13 +12,9 @@
 // The service name claimed by the Buffet daemon.
 extern const char kServiceName[];
 
-// Interface implemented by the object at kRootServicePath.
-extern const char kRootInterface[];
+// The object at this path implements the ObjectManager interface.
 extern const char kRootServicePath[];
 
-// Methods exposed as part of kRootInterface.
-extern const char kRootTestMethod[];
-
 // Interface implemented by the object at kManagerServicePath.
 extern const char kManagerInterface[];
 extern const char kManagerServicePath[];
@@ -29,6 +25,7 @@
 extern const char kManagerStartRegisterDevice[];
 extern const char kManagerFinishRegisterDevice[];
 extern const char kManagerUpdateStateMethod[];
+extern const char kManagerTestMethod[];
 
 }  // namespace dbus_constants
 
diff --git a/buffet/dbus_manager.cc b/buffet/dbus_manager.cc
deleted file mode 100644
index e1b3426..0000000
--- a/buffet/dbus_manager.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// 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_manager.h"
-
-#include <string>
-
-#include <base/bind.h>
-#include <dbus/object_path.h>
-
-#include "buffet/async_event_sequencer.h"
-#include "buffet/dbus_constants.h"
-#include "buffet/dbus_utils.h"
-
-using ::std::string;
-
-namespace buffet {
-
-DBusManager::DBusManager(dbus::Bus* bus)
-    : bus_(bus),
-      exported_object_(bus->GetExportedObject(
-          dbus::ObjectPath(dbus_constants::kRootServicePath))) { }
-
-DBusManager::~DBusManager() {
-  // Unregister ourselves from the Bus.  This prevents the bus from calling
-  // our callbacks in between the Manager's death and the bus unregistering
-  // our exported object on shutdown.  Unretained makes no promises of memory
-  // management.
-  exported_object_->Unregister();
-  exported_object_ = nullptr;
-}
-
-void DBusManager::Init(const OnInitFinish& cb) {
-  scoped_refptr<dbus_utils::AsyncEventSequencer> sequencer(
-      new dbus_utils::AsyncEventSequencer());
-  exported_object_->ExportMethod(
-      dbus_constants::kRootInterface, dbus_constants::kRootTestMethod,
-      dbus_utils::GetExportableDBusMethod(
-          base::Bind(&DBusManager::HandleTestMethod, base::Unretained(this))),
-      sequencer->GetExportHandler(
-          dbus_constants::kRootInterface, dbus_constants::kRootTestMethod,
-          "Failed exporting DBusManager's test method",
-          true));
-  sequencer->OnAllTasksCompletedCall({cb});
-}
-
-scoped_ptr<dbus::Response> DBusManager::HandleTestMethod(
-    dbus::MethodCall* method_call) {
-  LOG(INFO) << "Received call to test method.";
-  return scoped_ptr<dbus::Response>();
-}
-
-}  // namespace buffet
diff --git a/buffet/dbus_manager.h b/buffet/dbus_manager.h
deleted file mode 100644
index 13aa8f4..0000000
--- a/buffet/dbus_manager.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// 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_MANAGER_H_
-#define BUFFET_DBUS_MANAGER_H_
-
-#include <string>
-
-#include <base/memory/scoped_ptr.h>
-#include <dbus/bus.h>
-#include <dbus/exported_object.h>
-#include <dbus/message.h>
-
-namespace buffet {
-
-// Class that manages dbus interactions in buffet.
-class DBusManager {
- public:
-  typedef base::Callback<void(bool success)> OnInitFinish;
-
-  DBusManager(dbus::Bus* bus);
-  virtual ~DBusManager();
-
-  void Init(const OnInitFinish& cb);
-  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();
-
-  // Callbacks for handling D-Bus signals and method calls.
-  scoped_ptr<::dbus::Response> HandleTestMethod(
-      ::dbus::MethodCall* method_call);
-
-  scoped_refptr<::dbus::Bus> bus_;  // Must outlive this object.
-  dbus::ExportedObject* exported_object_;  // Owned by the bus.
-
-  DISALLOW_COPY_AND_ASSIGN(DBusManager);
-};
-
-}  // namespace buffet
-
-#endif  // BUFFET_DBUS_MANAGER_H_
diff --git a/buffet/main.cc b/buffet/main.cc
index 6d8ddc2..e48a1b0 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -12,10 +12,10 @@
 #include <base/message_loop/message_loop.h>
 #include <base/strings/string_util.h>
 #include <base/strings/stringprintf.h>
+#include <dbus/bus.h>
 #include <sysexits.h>
 
 #include "buffet/async_event_sequencer.h"
-#include "buffet/dbus_manager.h"
 #include "buffet/manager.h"
 
 using buffet::dbus_utils::AsyncEventSequencer;
@@ -87,8 +87,6 @@
 void EnterMainLoop(base::MessageLoopForIO* message_loop,
                    scoped_refptr<dbus::Bus> bus) {
   scoped_refptr<AsyncEventSequencer> sequencer(new AsyncEventSequencer());
-  buffet::DBusManager dbus_manager(bus.get());
-  dbus_manager.Init(sequencer->GetHandler("DBusManager.Init() failed.", true));
   buffet::Manager manager(bus.get());
   manager.Init(sequencer->GetHandler("Manager.Init() failed.", true));
   sequencer->OnAllTasksCompletedCall(
diff --git a/buffet/manager.cc b/buffet/manager.cc
index a6c8d9f..7e64223 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -6,13 +6,13 @@
 
 #include <base/bind.h>
 #include <base/bind_helpers.h>
+#include <base/json/json_writer.h>
+#include <dbus/bus.h>
 #include <dbus/object_path.h>
 #include <dbus/values_util.h>
-#include <base/json/json_writer.h>
 
 #include "buffet/async_event_sequencer.h"
 #include "buffet/dbus_constants.h"
-#include "buffet/dbus_manager.h"
 #include "buffet/dbus_utils.h"
 
 using buffet::dbus_utils::GetBadArgsError;
@@ -93,6 +93,14 @@
           dbus_constants::kManagerUpdateStateMethod,
           "Failed exporting UpdateState method",
           true));
+  exported_object_->ExportMethod(
+      dbus_constants::kManagerInterface, dbus_constants::kManagerTestMethod,
+      dbus_utils::GetExportableDBusMethod(
+          base::Bind(&Manager::HandleTestMethod, base::Unretained(this))),
+      sequencer->GetExportHandler(
+          dbus_constants::kManagerInterface, dbus_constants::kManagerTestMethod,
+          "Failed exporting TestMethod method",
+          true));
   properties_.reset(new Properties(bus_));
   // TODO(wiley): Initialize all properties appropriately before claiming
   //              the properties interface.
@@ -242,4 +250,10 @@
   return dbus::Response::FromMethodCall(method_call);
 }
 
+scoped_ptr<dbus::Response> Manager::HandleTestMethod(
+    dbus::MethodCall* method_call) {
+  LOG(INFO) << "Received call to test method.";
+  return scoped_ptr<dbus::Response>();
+}
+
 }  // namespace buffet
diff --git a/buffet/manager.h b/buffet/manager.h
index ad66252..d2b2859 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -58,6 +58,9 @@
   // Handles calls to org.chromium.Buffet.Manager.UpdateState().
   scoped_ptr<dbus::Response> HandleUpdateState(
       dbus::MethodCall* method_call);
+  // Handles calls to org.chromium.Buffet.Manager.Test()
+  scoped_ptr<::dbus::Response> HandleTestMethod(
+      ::dbus::MethodCall* method_call);
 
   dbus::Bus* bus_;
   dbus::ExportedObject* exported_object_;  // weak; owned by the Bus object.
