diff --git a/buffet/commands/command_manager.cc b/buffet/commands/command_manager.cc
index 26c0b9f..8c54e51 100644
--- a/buffet/commands/command_manager.cc
+++ b/buffet/commands/command_manager.cc
@@ -4,8 +4,6 @@
 
 #include "buffet/commands/command_manager.h"
 
-#include <base/at_exit.h>
-#include <base/bind.h>
 #include <base/file_util.h>
 #include <base/files/file_enumerator.h>
 #include <base/json/json_reader.h>
@@ -16,8 +14,6 @@
 
 namespace buffet {
 
-CommandManager* CommandManager::instance_ = nullptr;
-
 const CommandDictionary& CommandManager::GetCommandDictionary() const {
   return dictionary_;
 }
@@ -52,20 +48,12 @@
   return LoadCommands(*json, category, error);
 }
 
-CommandManager* CommandManager::GetInstance() {
-  CHECK(instance_) << "CommandManager instance not initialized.";
-  return instance_;
-}
-
 void CommandManager::Startup() {
-  CHECK(!instance_) << "CommandManager instance already initialized.";
   LOG(INFO) << "Initializing CommandManager.";
-  std::unique_ptr<CommandManager> inst(new CommandManager);
-
   // Load global standard GCD command dictionary.
   base::FilePath base_command_file("/etc/buffet/gcd.json");
   LOG(INFO) << "Loading standard commands from " << base_command_file.value();
-  CHECK(inst->LoadBaseCommands(base_command_file, nullptr))
+  CHECK(LoadBaseCommands(base_command_file, nullptr))
       << "Failed to load the standard command definitions.";
 
   // Load static device command definitions.
@@ -76,23 +64,10 @@
   base::FilePath json_file_path = enumerator.Next();
   while (!json_file_path.empty()) {
     LOG(INFO) << "Loading command schema from " << json_file_path.value();
-    CHECK(inst->LoadCommands(json_file_path, nullptr))
+    CHECK(LoadCommands(json_file_path, nullptr))
         << "Failed to load the command definition file.";
     json_file_path = enumerator.Next();
   }
-
-  // Register a cleanup callback to be executed at shut-down.
-  base::AtExitManager::RegisterTask(base::Bind(&CommandManager::Shutdown));
-  // Transfer the object instance pointer from the smart pointer to
-  // the global pointer.
-  instance_ = inst.release();
-}
-
-void CommandManager::Shutdown() {
-  CHECK(instance_) << "CommandManager instance not initialized.";
-  LOG(INFO) << "Shutting down CommandManager.";
-  delete instance_;
-  instance_ = nullptr;
 }
 
 std::unique_ptr<const base::DictionaryValue> CommandManager::LoadJsonDict(
diff --git a/buffet/commands/command_manager.h b/buffet/commands/command_manager.h
index 02d92fd..1199892 100644
--- a/buffet/commands/command_manager.h
+++ b/buffet/commands/command_manager.h
@@ -52,13 +52,11 @@
   bool LoadCommands(const base::FilePath& json_file_path,
                     ErrorPtr* error);
 
-  // Factory static method to get the global singleton instance of the object.
-  static CommandManager* GetInstance();
-  // Global startup method to be called by buffet daemon at startup.
-  // Initializes the global object singleton and loads the standard GCD command
+  // Startup method to be called by buffet daemon at startup.
+  // Initializes the object and loads the standard GCD command
   // dictionary as well as static vendor-provided command definitions for
   // the current device.
-  static void Startup();
+  void Startup();
 
  private:
   // Helper function to load a JSON file that is expected to be
@@ -66,14 +64,10 @@
   // in error details in |error|.
   std::unique_ptr<const base::DictionaryValue> LoadJsonDict(
       const base::FilePath& json_file_path, ErrorPtr* error);
-  // Helper method to be called at buffet shutdown to clean up the global
-  // singleton instance of this class.
-  static void Shutdown();
 
   CommandDictionary base_dictionary_;  // Base/std command definitions/schemas.
   CommandDictionary dictionary_;  // Command definitions/schemas.
 
-  static CommandManager* instance_;  // Global singleton instance of the object.
   DISALLOW_COPY_AND_ASSIGN(CommandManager);
 };
 
diff --git a/buffet/main.cc b/buffet/main.cc
index cc2fea7..358358e 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -16,7 +16,6 @@
 #include <sysexits.h>
 
 #include "buffet/async_event_sequencer.h"
-#include "buffet/commands/command_manager.h"
 #include "buffet/dbus_constants.h"
 #include "buffet/exported_object_manager.h"
 #include "buffet/manager.h"
@@ -103,8 +102,6 @@
   // both callbacks return.
   sequencer = nullptr;
 
-  buffet::CommandManager::Startup();
-
   LOG(INFO) << "Entering mainloop.";
   message_loop->Run();
 }
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 3639803..e493329 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -15,6 +15,7 @@
 #include <dbus/values_util.h>
 
 #include "buffet/async_event_sequencer.h"
+#include "buffet/commands/command_manager.h"
 #include "buffet/dbus_constants.h"
 #include "buffet/dbus_utils.h"
 #include "buffet/error.h"
@@ -128,6 +129,8 @@
                  properties_->GetPropertyWriter(
                      dbus_constants::kManagerInterface)));
   sequencer->OnAllTasksCompletedCall({claim_interface_task, cb});
+  command_manager_ = std::make_shared<CommandManager>();
+  command_manager_->Startup();
   device_info_.Load();
 }
 
diff --git a/buffet/manager.h b/buffet/manager.h
index 2041160..c0b346d 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -21,6 +21,8 @@
 
 namespace buffet {
 
+class CommandManager;
+
 namespace dbus_utils {
 class ExportedObjectManager;
 }  // namespace dbus_utils
@@ -73,6 +75,7 @@
   base::WeakPtr<dbus_utils::ExportedObjectManager> object_manager_;
   scoped_ptr<Properties> properties_;
 
+  std::shared_ptr<CommandManager> command_manager_;
   DeviceRegistrationInfo device_info_;
 
   DISALLOW_COPY_AND_ASSIGN(Manager);
