diff --git a/buffet/commands/dbus_command_dispatcher_unittest.cc b/buffet/commands/dbus_command_dispatcher_unittest.cc
index ed272a1..8033390 100644
--- a/buffet/commands/dbus_command_dispatcher_unittest.cc
+++ b/buffet/commands/dbus_command_dispatcher_unittest.cc
@@ -116,11 +116,11 @@
   }
 
   void FinishCommand(DBusCommandProxy* proxy) {
-    proxy->HandleDone();
+    proxy->Done();
   }
 
   void SetProgress(DBusCommandProxy* proxy, int progress) {
-    proxy->HandleSetProgress(nullptr, progress);
+    proxy->SetProgress(nullptr, progress);
   }
 
 
diff --git a/buffet/commands/dbus_command_proxy.cc b/buffet/commands/dbus_command_proxy.cc
index 4ef94a8..2778a78 100644
--- a/buffet/commands/dbus_command_proxy.cc
+++ b/buffet/commands/dbus_command_proxy.cc
@@ -20,44 +20,20 @@
                                    const scoped_refptr<dbus::Bus>& bus,
                                    CommandInstance* command_instance,
                                    std::string object_path)
-    : object_path_(std::move(object_path)),
-      command_instance_(command_instance),
-      dbus_object_(object_manager, bus, object_path_) {
+    : command_instance_{command_instance},
+      dbus_object_{object_manager, bus, dbus::ObjectPath{object_path}} {
 }
 
 void DBusCommandProxy::RegisterAsync(
       const AsyncEventSequencer::CompletionAction& completion_callback) {
-  chromeos::dbus_utils::DBusInterface* itf =
-    dbus_object_.AddOrGetInterface(dbus_constants::kCommandInterface);
-
-  // DBus methods.
-  itf->AddSimpleMethodHandlerWithError(dbus_constants::kCommandSetProgress,
-                                       base::Unretained(this),
-                                       &DBusCommandProxy::HandleSetProgress);
-  itf->AddSimpleMethodHandler(dbus_constants::kCommandAbort,
-                              base::Unretained(this),
-                              &DBusCommandProxy::HandleAbort);
-  itf->AddSimpleMethodHandler(dbus_constants::kCommandCancel,
-                              base::Unretained(this),
-                              &DBusCommandProxy::HandleCancel);
-  itf->AddSimpleMethodHandler(dbus_constants::kCommandDone,
-                              base::Unretained(this),
-                              &DBusCommandProxy::HandleDone);
-
-  // DBus properties.
-  itf->AddProperty(dbus_constants::kCommandName, &name_);
-  itf->AddProperty(dbus_constants::kCommandCategory, &category_);
-  itf->AddProperty(dbus_constants::kCommandId, &id_);
-  itf->AddProperty(dbus_constants::kCommandStatus, &status_);
-  itf->AddProperty(dbus_constants::kCommandProgress, &progress_);
-  itf->AddProperty(dbus_constants::kCommandParameters, &parameters_);
+  dbus_adaptor_.RegisterWithDBusObject(&dbus_object_);
 
   // Set the initial property values before registering the DBus object.
-  name_.SetValue(command_instance_->GetName());
-  category_.SetValue(command_instance_->GetCategory());
-  id_.SetValue(command_instance_->GetID());
-  status_.SetValue(command_instance_->GetStatus());
-  progress_.SetValue(command_instance_->GetProgress());
+  dbus_adaptor_.SetName(command_instance_->GetName());
+  dbus_adaptor_.SetCategory(command_instance_->GetCategory());
+  dbus_adaptor_.SetId(command_instance_->GetID());
+  dbus_adaptor_.SetStatus(command_instance_->GetStatus());
+  dbus_adaptor_.SetProgress(command_instance_->GetProgress());
   // Convert a string-to-PropValue map into a string-to-Any map which can be
   // sent over D-Bus.
   chromeos::VariantDictionary params;
@@ -65,22 +41,22 @@
     params.insert(std::make_pair(param_pair.first,
                                  param_pair.second->GetValueAsAny()));
   }
-  parameters_.SetValue(params);
+  dbus_adaptor_.SetParameters(params);
 
   // Register the command DBus object and expose its methods and properties.
   dbus_object_.RegisterAsync(completion_callback);
 }
 
 void DBusCommandProxy::OnStatusChanged(const std::string& status) {
-  status_.SetValue(status);
+  dbus_adaptor_.SetStatus(status);
 }
 
 void DBusCommandProxy::OnProgressChanged(int progress) {
-  progress_.SetValue(progress);
+  dbus_adaptor_.SetProgress(progress);
 }
 
-bool DBusCommandProxy::HandleSetProgress(chromeos::ErrorPtr* error,
-                                         int32_t progress) {
+bool DBusCommandProxy::SetProgress(chromeos::ErrorPtr* error,
+                                   int32_t progress) {
   LOG(INFO) << "Received call to Command<"
             << command_instance_->GetName() << ">::SetProgress("
             << progress << ")";
@@ -95,19 +71,19 @@
   return true;
 }
 
-void DBusCommandProxy::HandleAbort() {
+void DBusCommandProxy::Abort() {
   LOG(INFO) << "Received call to Command<"
             << command_instance_->GetName() << ">::Abort()";
   command_instance_->Abort();
 }
 
-void DBusCommandProxy::HandleCancel() {
+void DBusCommandProxy::Cancel() {
   LOG(INFO) << "Received call to Command<"
             << command_instance_->GetName() << ">::Cancel()";
   command_instance_->Cancel();
 }
 
-void DBusCommandProxy::HandleDone() {
+void DBusCommandProxy::Done() {
   LOG(INFO) << "Received call to Command<"
             << command_instance_->GetName() << ">::Done()";
   command_instance_->Done();
diff --git a/buffet/commands/dbus_command_proxy.h b/buffet/commands/dbus_command_proxy.h
index 386ecaf..f3f3e4e 100644
--- a/buffet/commands/dbus_command_proxy.h
+++ b/buffet/commands/dbus_command_proxy.h
@@ -13,6 +13,7 @@
 
 #include "buffet/commands/command_proxy_interface.h"
 #include "buffet/libbuffet/dbus_constants.h"
+#include "buffet/org.chromium.Buffet.Command.h"
 
 namespace chromeos {
 namespace dbus_utils {
@@ -24,7 +25,8 @@
 
 class CommandInstance;
 
-class DBusCommandProxy : public CommandProxyInterface {
+class DBusCommandProxy : public CommandProxyInterface,
+                         public org::chromium::Buffet::CommandInterface {
  public:
   DBusCommandProxy(chromeos::dbus_utils::ExportedObjectManager* object_manager,
                    const scoped_refptr<dbus::Bus>& bus,
@@ -41,27 +43,17 @@
   void OnProgressChanged(int progress) override;
 
  private:
-  // DBus properties for org.chromium.Buffet.Command interface.
-  chromeos::dbus_utils::ExportedProperty<std::string> name_;
-  chromeos::dbus_utils::ExportedProperty<std::string> category_;
-  chromeos::dbus_utils::ExportedProperty<std::string> id_;
-  chromeos::dbus_utils::ExportedProperty<std::string> status_;
-  chromeos::dbus_utils::ExportedProperty<int32_t> progress_;
-  chromeos::dbus_utils::ExportedProperty<chromeos::VariantDictionary>
-      parameters_;
-
   // Handles calls to org.chromium.Buffet.Command.SetProgress(progress).
-  bool HandleSetProgress(chromeos::ErrorPtr* error, int32_t progress);
+  bool SetProgress(chromeos::ErrorPtr* error, int32_t progress) override;
   // Handles calls to org.chromium.Buffet.Command.Abort().
-  void HandleAbort();
+  void Abort() override;
   // Handles calls to org.chromium.Buffet.Command.Cancel().
-  void HandleCancel();
+  void Cancel() override;
   // Handles calls to org.chromium.Buffet.Command.Done().
-  void HandleDone();
+  void Done() override;
 
-  dbus::ObjectPath object_path_;
   CommandInstance* command_instance_;
-
+  org::chromium::Buffet::CommandAdaptor dbus_adaptor_{this};
   chromeos::dbus_utils::DBusObject dbus_object_;
 
   friend class DBusCommandProxyTest;
diff --git a/buffet/commands/dbus_command_proxy_unittest.cc b/buffet/commands/dbus_command_proxy_unittest.cc
index 81d9827..a810464 100644
--- a/buffet/commands/dbus_command_proxy_unittest.cc
+++ b/buffet/commands/dbus_command_proxy_unittest.cc
@@ -118,15 +118,15 @@
   }
 
   std::string GetStatus() const {
-    return GetCommandProxy()->status_.value();
+    return GetCommandProxy()->dbus_adaptor_.GetStatus();
   }
 
   int32_t GetProgress() const {
-    return GetCommandProxy()->progress_.value();
+    return GetCommandProxy()->dbus_adaptor_.GetProgress();
   }
 
   VariantDictionary GetParameters() const {
-    return GetCommandProxy()->parameters_.value();
+    return GetCommandProxy()->dbus_adaptor_.GetParameters();
   }
 
   std::unique_ptr<dbus::Response> CallMethod(
