diff --git a/buffet/commands/command_instance.cc b/buffet/commands/command_instance.cc
index 0caee20..c83b48a 100644
--- a/buffet/commands/command_instance.cc
+++ b/buffet/commands/command_instance.cc
@@ -32,6 +32,8 @@
     : name_(name), category_(category), parameters_(parameters) {
 }
 
+CommandInstance::~CommandInstance() = default;
+
 std::shared_ptr<const PropValue> CommandInstance::FindParameter(
     const std::string& name) const {
   std::shared_ptr<const PropValue> value;
@@ -138,6 +140,10 @@
   return instance;
 }
 
+void CommandInstance::AddProxy(std::unique_ptr<CommandProxyInterface> proxy) {
+  proxies_.push_back(std::move(proxy));
+}
+
 bool CommandInstance::SetProgress(int progress) {
   if (progress < 0 || progress > 100)
     return false;
diff --git a/buffet/commands/command_instance.h b/buffet/commands/command_instance.h
index e35fd7b..b324850 100644
--- a/buffet/commands/command_instance.h
+++ b/buffet/commands/command_instance.h
@@ -34,6 +34,7 @@
   CommandInstance(const std::string& name,
                   const std::string& category,
                   const native_types::Object& parameters);
+  ~CommandInstance();
 
   // Returns the full command ID.
   const std::string& GetID() const { return id_; }
@@ -61,9 +62,7 @@
   void SetID(const std::string& id) { id_ = id; }
   // Adds a proxy for this command.
   // The proxy object is not owned by this class.
-  void AddProxy(CommandProxyInterface* proxy) { proxies_.push_back(proxy); }
-  // Removes all the proxies for this command.
-  void ClearProxies() { proxies_.clear(); }
+  void AddProxy(std::unique_ptr<CommandProxyInterface> proxy);
   // Sets the pointer to queue this command is part of.
   void SetCommandQueue(CommandQueue* queue) { queue_ = queue; }
 
@@ -115,11 +114,13 @@
   // Current command execution progress.
   int progress_ = 0;
   // Command proxies for the command.
-  std::vector<CommandProxyInterface*> proxies_;
+  std::vector<std::unique_ptr<CommandProxyInterface>> proxies_;
   // Pointer to the command queue this command instance is added to.
   // The queue owns the command instance, so it outlives this object.
   CommandQueue* queue_ = nullptr;
 
+  friend class DBusCommandDispacherTest;
+  friend class DBusCommandProxyTest;
   DISALLOW_COPY_AND_ASSIGN(CommandInstance);
 };
 
diff --git a/buffet/commands/dbus_command_dispatcher.cc b/buffet/commands/dbus_command_dispatcher.cc
index d36a927..6751372 100644
--- a/buffet/commands/dbus_command_dispatcher.cc
+++ b/buffet/commands/dbus_command_dispatcher.cc
@@ -24,17 +24,10 @@
 void DBusCommandDispacher::OnCommandAdded(CommandInstance* command_instance) {
   auto proxy = CreateDBusCommandProxy(command_instance);
   proxy->RegisterAsync(AsyncEventSequencer::GetDefaultCompletionAction());
-  command_instance->AddProxy(proxy.get());
-
-  auto pair = std::make_pair(command_instance, std::move(proxy));
-  CHECK(command_map_.insert(std::move(pair)).second)
-      << "The command instance is already in the dispatcher command map";
+  command_instance->AddProxy(std::move(proxy));
 }
 
 void DBusCommandDispacher::OnCommandRemoved(CommandInstance* command_instance) {
-  command_instance->ClearProxies();
-  CHECK_GT(command_map_.erase(command_instance), 0u)
-      << "The command instance is not in the dispatcher command map";
 }
 
 std::unique_ptr<DBusCommandProxy> DBusCommandDispacher::CreateDBusCommandProxy(
diff --git a/buffet/commands/dbus_command_dispatcher.h b/buffet/commands/dbus_command_dispatcher.h
index ca546e7..35d258b 100644
--- a/buffet/commands/dbus_command_dispatcher.h
+++ b/buffet/commands/dbus_command_dispatcher.h
@@ -49,9 +49,6 @@
   scoped_refptr<dbus::Bus> bus_;
   base::WeakPtr<chromeos::dbus_utils::ExportedObjectManager> object_manager_;
   int next_id_;
-  // This is the map that tracks relationship between CommandInstance and
-  // corresponding DBusCommandProxy objects.
-  std::map<CommandInstance*, std::unique_ptr<DBusCommandProxy>> command_map_;
 
   // Default constructor is used in special circumstances such as for testing.
   DBusCommandDispacher() = default;
diff --git a/buffet/commands/dbus_command_dispatcher_unittest.cc b/buffet/commands/dbus_command_dispatcher_unittest.cc
index 9808363..314135f 100644
--- a/buffet/commands/dbus_command_dispatcher_unittest.cc
+++ b/buffet/commands/dbus_command_dispatcher_unittest.cc
@@ -108,9 +108,8 @@
   }
 
   DBusCommandProxy* FindProxy(CommandInstance* command_instance) {
-    const auto& command_map = command_dispatcher_->command_map_;
-    auto it = command_map.find(command_instance);
-    return it != command_map.end() ? it->second.get() : nullptr;
+    CHECK_EQ(command_instance->proxies_.size(), 1);
+    return static_cast<DBusCommandProxy*>(command_instance->proxies_[0].get());
   }
 
   void FinishCommand(DBusCommandProxy* proxy) {
@@ -156,7 +155,6 @@
   EXPECT_CALL(*mock_exported_object_manager_, SendSignal(_)).Times(2);
   FinishCommand(command_proxy);
 
-  EXPECT_EQ(nullptr, FindProxy(command_instance));
   EXPECT_EQ(nullptr, command_queue_.Find(id));
 }
 
@@ -190,7 +188,6 @@
   EXPECT_CALL(*mock_exported_object_manager_, SendSignal(_)).Times(2);
   FinishCommand(command_proxy);
 
-  EXPECT_EQ(nullptr, FindProxy(command_instance));
   EXPECT_EQ(nullptr, command_queue_.Find(id));
 }
 
diff --git a/buffet/commands/dbus_command_proxy_unittest.cc b/buffet/commands/dbus_command_proxy_unittest.cc
index ab4e36c..0c1bbaa 100644
--- a/buffet/commands/dbus_command_proxy_unittest.cc
+++ b/buffet/commands/dbus_command_proxy_unittest.cc
@@ -91,37 +91,39 @@
     EXPECT_CALL(*mock_exported_object_command_,
                 ExportMethod(_, _, _, _)).Times(AnyNumber());
 
-    command_proxy_.reset(new DBusCommandProxy(nullptr, bus_,
-                                              command_instance_.get(),
-                                              cmd_path));
-    command_instance_->AddProxy(command_proxy_.get());
-    command_proxy_->RegisterAsync(
+    std::unique_ptr<CommandProxyInterface> command_proxy(
+        new DBusCommandProxy(nullptr, bus_, command_instance_.get(), cmd_path));
+    command_instance_->AddProxy(std::move(command_proxy));
+    GetCommandProxy()->RegisterAsync(
         AsyncEventSequencer::GetDefaultCompletionAction());
   }
 
   void TearDown() override {
     EXPECT_CALL(*mock_exported_object_command_, Unregister()).Times(1);
-    command_instance_->ClearProxies();
-    command_proxy_.reset();
     command_instance_.reset();
     dict_.Clear();
     bus_ = nullptr;
   }
 
+  DBusCommandProxy* GetCommandProxy() const {
+    CHECK_EQ(command_instance_->proxies_.size(), 1);
+    return static_cast<DBusCommandProxy*>(command_instance_->proxies_[0].get());
+  }
+
   chromeos::dbus_utils::DBusObject* GetProxyDBusObject() {
-    return &command_proxy_->dbus_object_;
+    return &GetCommandProxy()->dbus_object_;
   }
 
   std::string GetStatus() const {
-    return command_proxy_->status_.value();
+    return GetCommandProxy()->status_.value();
   }
 
   int32_t GetProgress() const {
-    return command_proxy_->progress_.value();
+    return GetCommandProxy()->progress_.value();
   }
 
   VariantDictionary GetParameters() const {
-    return command_proxy_->parameters_.value();
+    return GetCommandProxy()->parameters_.value();
   }
 
   std::unique_ptr<dbus::Response> CallMethod(
@@ -168,7 +170,6 @@
     return value;
   }
 
-  std::unique_ptr<DBusCommandProxy> command_proxy_;
   std::unique_ptr<CommandInstance> command_instance_;
   CommandDictionary dict_;
 
