diff --git a/buffet/libbuffet/command.cc b/buffet/libbuffet/command.cc
new file mode 100644
index 0000000..e9f9e6c
--- /dev/null
+++ b/buffet/libbuffet/command.cc
@@ -0,0 +1,76 @@
+// 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 "libbuffet/command.h"
+
+#include <chromeos/dbus/dbus_method_invoker.h>
+
+#include "libbuffet/command_listener.h"
+#include "libbuffet/dbus_constants.h"
+#include "libbuffet/private/command_property_set.h"
+
+namespace buffet {
+
+Command::Command(const dbus::ObjectPath& object_path,
+                 CommandListener* command_listener)
+    : object_path_(object_path), command_listener_(command_listener) {}
+
+const std::string& Command::GetID() const {
+  return GetProperties()->id.value();
+}
+
+const std::string& Command::GetName() const {
+  return GetProperties()->name.value();
+}
+
+const std::string& Command::GetCategory() const {
+  return GetProperties()->category.value();
+}
+
+const chromeos::dbus_utils::Dictionary& Command::GetParameters() const {
+  return GetProperties()->parameters.value();
+}
+
+void Command::SetProgress(int progress) {
+  chromeos::dbus_utils::CallMethodAndBlock(GetObjectProxy(),
+                                           dbus_constants::kCommandInterface,
+                                           dbus_constants::kCommandSetProgress,
+                                           progress);
+}
+
+void Command::Abort() {
+  chromeos::dbus_utils::CallMethodAndBlock(GetObjectProxy(),
+                                           dbus_constants::kCommandInterface,
+                                           dbus_constants::kCommandAbort);
+}
+
+void Command::Cancel() {
+  chromeos::dbus_utils::CallMethodAndBlock(GetObjectProxy(),
+                                           dbus_constants::kCommandInterface,
+                                           dbus_constants::kCommandCancel);
+}
+
+void Command::Done() {
+  chromeos::dbus_utils::CallMethodAndBlock(GetObjectProxy(),
+                                           dbus_constants::kCommandInterface,
+                                           dbus_constants::kCommandDone);
+}
+
+int Command::GetProgress() const {
+  return GetProperties()->progress.value();
+}
+
+const std::string& Command::GetStatus() const {
+  return GetProperties()->status.value();
+}
+
+CommandPropertySet* Command::GetProperties() const {
+  return command_listener_->GetProperties(object_path_);
+}
+
+dbus::ObjectProxy* Command::GetObjectProxy() const {
+  return command_listener_->GetObjectProxy(object_path_);
+}
+
+}  // namespace buffet
diff --git a/buffet/libbuffet/command.h b/buffet/libbuffet/command.h
new file mode 100644
index 0000000..3404898
--- /dev/null
+++ b/buffet/libbuffet/command.h
@@ -0,0 +1,68 @@
+// 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_LIBBUFFET_COMMAND_H_
+#define BUFFET_LIBBUFFET_COMMAND_H_
+
+#include <string>
+
+#include <base/macros.h>
+#include <base/memory/weak_ptr.h>
+#include <chromeos/any.h>
+#include <chromeos/dbus/data_serialization.h>
+
+#include "libbuffet/export.h"
+
+namespace dbus {
+class ObjectProxy;
+}
+
+namespace buffet {
+
+class CommandListener;
+class CommandPropertySet;
+
+// buffet::Command is a proxy class for GCD CommandInstance object delivered to
+// command handling daemon over D-Bus.
+class LIBBUFFET_EXPORT Command {
+ public:
+  Command(const dbus::ObjectPath& object_path,
+          CommandListener* command_listener);
+
+  // Returns the command ID.
+  const std::string& GetID() const;
+  // Returns the full name of the command.
+  const std::string& GetName() const;
+  // Returns the command category.
+  const std::string& GetCategory() const;
+  // Returns the command parameters and their values.
+  const chromeos::dbus_utils::Dictionary& GetParameters() const;
+
+  // Updates the command execution progress. The |progress| must be between
+  // 0 and 100. Returns false if the progress value is incorrect.
+  void SetProgress(int progress);
+  // Aborts command execution.
+  void Abort();
+  // Cancels command execution.
+  void Cancel();
+  // Marks the command as completed successfully.
+  void Done();
+
+  // Command state getters.
+  int GetProgress() const;
+  const std::string& GetStatus() const;
+
+ private:
+  CommandPropertySet* GetProperties() const;
+  dbus::ObjectProxy* GetObjectProxy() const;
+
+  dbus::ObjectPath object_path_;
+  CommandListener* command_listener_;
+
+  DISALLOW_COPY_AND_ASSIGN(Command);
+};
+
+}  // namespace buffet
+
+#endif  // BUFFET_LIBBUFFET_COMMAND_H_
diff --git a/buffet/libbuffet/command_listener.cc b/buffet/libbuffet/command_listener.cc
new file mode 100644
index 0000000..40c09a3
--- /dev/null
+++ b/buffet/libbuffet/command_listener.cc
@@ -0,0 +1,89 @@
+// 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 "libbuffet/command_listener.h"
+
+#include <dbus/bus.h>
+
+#include "libbuffet/command.h"
+#include "libbuffet/dbus_constants.h"
+#include "libbuffet/private/command_property_set.h"
+
+namespace buffet {
+
+CommandPropertySet::CommandPropertySet(dbus::ObjectProxy* object_proxy,
+                                       const std::string& interface_name,
+                                       const PropertyChangedCallback& callback)
+    : dbus::PropertySet(object_proxy, interface_name, callback) {
+  RegisterProperty(dbus_constants::kCommandName, &name);
+  RegisterProperty(dbus_constants::kCommandCategory, &category);
+  RegisterProperty(dbus_constants::kCommandId, &id);
+  RegisterProperty(dbus_constants::kCommandStatus, &status);
+  RegisterProperty(dbus_constants::kCommandProgress, &progress);
+  RegisterProperty(dbus_constants::kCommandParameters, &parameters);
+}
+
+bool CommandListener::Init(
+    dbus::Bus* bus, const OnBuffetCommandCallback& on_buffet_command_callback) {
+  object_manager_ = bus->GetObjectManager(
+      dbus_constants::kServiceName,
+      dbus::ObjectPath(dbus_constants::kRootServicePath));
+  on_buffet_command_callback_ = on_buffet_command_callback;
+  object_manager_->RegisterInterface(dbus_constants::kCommandInterface, this);
+  return true;
+}
+
+dbus::PropertySet* CommandListener::CreateProperties(
+    dbus::ObjectProxy* object_proxy,
+    const dbus::ObjectPath& object_path,
+    const std::string& interface_name) {
+  return new CommandPropertySet(object_proxy,
+                                interface_name,
+                                base::Bind(&CommandListener::OnPropertyChanged,
+                                           weak_ptr_factory_.GetWeakPtr(),
+                                           object_path));
+}
+
+CommandPropertySet* CommandListener::GetProperties(
+    const dbus::ObjectPath& object_path) const {
+  auto props = object_manager_->GetProperties(
+      object_path, dbus_constants::kCommandInterface);
+  CHECK(props) << "Unable to get property set of D-Bus object at "
+               << object_path.value();
+  return static_cast<CommandPropertySet*>(props);
+}
+
+dbus::ObjectProxy* CommandListener::GetObjectProxy(
+    const dbus::ObjectPath& object_path) const {
+  auto proxy = object_manager_->GetObjectProxy(object_path);
+  CHECK(proxy) << "Unable to get D-Bus object proxy for "
+               << object_path.value();
+  return proxy;
+}
+
+void CommandListener::ObjectAdded(const dbus::ObjectPath& object_path,
+                                  const std::string& interface_name) {
+  VLOG(1) << "D-Bus interface '" << interface_name
+          << "' has been added for object at path '"
+          << object_path.value() << "'.";
+  scoped_ptr<Command> command(new Command(object_path, this));
+  if (!on_buffet_command_callback_.is_null())
+    on_buffet_command_callback_.Run(command.Pass());
+}
+
+void CommandListener::ObjectRemoved(const dbus::ObjectPath& object_path,
+                                    const std::string& interface_name) {
+  VLOG(1) << "D-Bus interface '" << interface_name
+          << "' has been removed from object at path '"
+          << object_path.value() << "'.";
+}
+
+
+void CommandListener::OnPropertyChanged(const dbus::ObjectPath& object_path,
+                                        const std::string& property_name) {
+  VLOG(1) << "Value of property '" << property_name
+          << "' on object at path '" << object_path.value() << "' has changed";
+}
+
+}  // namespace buffet
diff --git a/buffet/libbuffet/command_listener.h b/buffet/libbuffet/command_listener.h
new file mode 100644
index 0000000..e36a1d3
--- /dev/null
+++ b/buffet/libbuffet/command_listener.h
@@ -0,0 +1,88 @@
+// 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_LIBBUFFET_COMMAND_LISTENER_H_
+#define BUFFET_LIBBUFFET_COMMAND_LISTENER_H_
+
+#include <string>
+#include <vector>
+
+#include <base/callback_forward.h>
+#include <base/macros.h>
+#include <base/memory/scoped_ptr.h>
+#include <base/memory/weak_ptr.h>
+#include <chromeos/any.h>
+#include <chromeos/dbus/data_serialization.h>
+#include <dbus/object_manager.h>
+
+#include "libbuffet/export.h"
+
+namespace buffet {
+
+class CommandPropertySet;
+class Command;
+// Have to use scoped_ptr<> instead of unique_ptr<> for callback parameter
+// because base::Callback cannot handle C++11 move-only types.
+using OnBuffetCommandCallback = base::Callback<void(scoped_ptr<Command>)>;
+
+// buffet::CommandListener is a helper class that connects to Buffet's D-Bus
+// object manager and listens to InterfacesAdded notifications. When a new
+// Command D-Bus object becomes available, this class calls
+// a OnBuffetCommandCallback with buffet::Command object instance that is
+// a proxy for the remote D-Bus command object.
+class LIBBUFFET_EXPORT CommandListener : public dbus::ObjectManager::Interface {
+ public:
+  CommandListener() = default;
+
+  // Initializes the object and establishes connection to Buffet's  D-Bus Object
+  // Manager. Callback |on_buffet_command_callback| is called with Command
+  // object whenever a new Buffet command becomes available.
+  bool Init(dbus::Bus* bus,
+            const OnBuffetCommandCallback& on_buffet_command_callback);
+
+ protected:
+  // Callback invoked when the value of property |property_name| of an object
+  // at |object_path| is changed.
+  virtual void OnPropertyChanged(const dbus::ObjectPath& object_path,
+                                 const std::string& property_name);
+
+  // Called by D-Bus ObjectManager to notify that an object has been added with
+  // the path |object_path|.
+  void ObjectAdded(
+      const dbus::ObjectPath& object_path,
+      const std::string& interface_name) override;
+
+  // Called by D-Bus ObjectManager to notify that an object with the path
+  // |object_path| has been removed.
+  void ObjectRemoved(
+      const dbus::ObjectPath& object_path,
+      const std::string& interface_name) override;
+
+ private:
+  // Override from dbus::ObjectManager::Interface to create the property set
+  // for out Command D-Bus object.
+  LIBBUFFET_PRIVATE dbus::PropertySet* CreateProperties(
+      dbus::ObjectProxy* object_proxy,
+      const dbus::ObjectPath& object_path,
+      const std::string& interface_name) override;
+
+  // Gets the CommandPropertySet for the command object at |object_path|.
+  LIBBUFFET_PRIVATE CommandPropertySet* GetProperties(
+      const dbus::ObjectPath& object_path) const;
+
+  // Gets the D-Bus proxy for the command object at |object_path|.
+  LIBBUFFET_PRIVATE dbus::ObjectProxy* GetObjectProxy(
+    const dbus::ObjectPath& object_path) const;
+
+  dbus::ObjectManager* object_manager_;
+  OnBuffetCommandCallback on_buffet_command_callback_;
+  base::WeakPtrFactory<CommandListener> weak_ptr_factory_{this};
+
+  friend class Command;
+  DISALLOW_COPY_AND_ASSIGN(CommandListener);
+};
+
+}  // namespace buffet
+
+#endif  // BUFFET_LIBBUFFET_COMMAND_LISTENER_H_
diff --git a/buffet/libbuffet/dbus_constants.cc b/buffet/libbuffet/dbus_constants.cc
new file mode 100644
index 0000000..be5c16c
--- /dev/null
+++ b/buffet/libbuffet/dbus_constants.cc
@@ -0,0 +1,43 @@
+// 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 "libbuffet/dbus_constants.h"
+
+namespace buffet {
+
+namespace dbus_constants {
+
+const char kServiceName[] = "org.chromium.Buffet";
+
+const char kRootServicePath[] = "/org/chromium/Buffet";
+
+const char kManagerInterface[] = "org.chromium.Buffet.Manager";
+const char kManagerServicePath[] = "/org/chromium/Buffet/Manager";
+
+const char kManagerCheckDeviceRegistered[]  = "CheckDeviceRegistered";
+const char kManagerGetDeviceInfo[]          = "GetDeviceInfo";
+const char kManagerStartRegisterDevice[]    = "StartRegisterDevice";
+const char kManagerFinishRegisterDevice[]   = "FinishRegisterDevice";
+const char kManagerUpdateStateMethod[]      = "UpdateState";
+const char kManagerAddCommand[]             = "AddCommand";
+const char kManagerTestMethod[]             = "TestMethod";
+
+const char kCommandInterface[] = "org.chromium.Buffet.Command";
+const char kCommandServicePathPrefix[] = "/org/chromium/Buffet/commands/";
+
+const char kCommandSetProgress[] = "SetProgress";
+const char kCommandAbort[] = "Abort";
+const char kCommandCancel[] = "Cancel";
+const char kCommandDone[] = "Done";
+
+const char kCommandName[] = "Name";
+const char kCommandCategory[] = "Category";
+const char kCommandId[] = "Id";
+const char kCommandStatus[] = "Status";
+const char kCommandProgress[] = "Progress";
+const char kCommandParameters[] = "Parameters";
+
+}  // namespace dbus_constants
+
+}  // namespace buffet
diff --git a/buffet/libbuffet/dbus_constants.h b/buffet/libbuffet/dbus_constants.h
new file mode 100644
index 0000000..5890d36
--- /dev/null
+++ b/buffet/libbuffet/dbus_constants.h
@@ -0,0 +1,55 @@
+// 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_LIBBUFFET_DBUS_CONSTANTS_H_
+#define BUFFET_LIBBUFFET_DBUS_CONSTANTS_H_
+
+#include "libbuffet/export.h"
+
+namespace buffet {
+
+namespace dbus_constants {
+
+// The service name claimed by the Buffet daemon.
+LIBBUFFET_EXPORT extern const char kServiceName[];
+
+// The object at this path implements the ObjectManager interface.
+LIBBUFFET_EXPORT extern const char kRootServicePath[];
+
+// Interface implemented by the object at kManagerServicePath.
+LIBBUFFET_EXPORT extern const char kManagerInterface[];
+LIBBUFFET_EXPORT extern const char kManagerServicePath[];
+
+// Methods exposed as part of kManagerInterface.
+LIBBUFFET_EXPORT extern const char kManagerCheckDeviceRegistered[];
+LIBBUFFET_EXPORT extern const char kManagerGetDeviceInfo[];
+LIBBUFFET_EXPORT extern const char kManagerStartRegisterDevice[];
+LIBBUFFET_EXPORT extern const char kManagerFinishRegisterDevice[];
+LIBBUFFET_EXPORT extern const char kManagerUpdateStateMethod[];
+LIBBUFFET_EXPORT extern const char kManagerAddCommand[];
+LIBBUFFET_EXPORT extern const char kManagerTestMethod[];
+
+// Interface implemented by the command instance objects.
+LIBBUFFET_EXPORT extern const char kCommandInterface[];
+LIBBUFFET_EXPORT extern const char kCommandServicePathPrefix[];
+
+// Methods exposed as part of kCommandInterface.
+LIBBUFFET_EXPORT extern const char kCommandSetProgress[];
+LIBBUFFET_EXPORT extern const char kCommandAbort[];
+LIBBUFFET_EXPORT extern const char kCommandCancel[];
+LIBBUFFET_EXPORT extern const char kCommandDone[];
+
+// Properties exposed as part of kCommandInterface.
+LIBBUFFET_EXPORT extern const char kCommandName[];
+LIBBUFFET_EXPORT extern const char kCommandCategory[];
+LIBBUFFET_EXPORT extern const char kCommandId[];
+LIBBUFFET_EXPORT extern const char kCommandStatus[];
+LIBBUFFET_EXPORT extern const char kCommandProgress[];
+LIBBUFFET_EXPORT extern const char kCommandParameters[];
+
+}  // namespace dbus_constants
+
+}  // namespace buffet
+
+#endif  // BUFFET_LIBBUFFET_DBUS_CONSTANTS_H_
diff --git a/buffet/libbuffet/export.h b/buffet/libbuffet/export.h
new file mode 100644
index 0000000..e67d6bb
--- /dev/null
+++ b/buffet/libbuffet/export.h
@@ -0,0 +1,13 @@
+// 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_LIBBUFFET_EXPORT_H_
+#define BUFFET_LIBBUFFET_EXPORT_H_
+
+// See detailed explanation of the purpose of LIBBUFFET_EXPORT in
+// chromeos/chromeos_export.h for similar attribute - CHROMEOS_EXPORT.
+#define LIBBUFFET_EXPORT __attribute__((__visibility__("default")))
+#define LIBBUFFET_PRIVATE __attribute__((__visibility__("hidden")))
+
+#endif  // BUFFET_LIBBUFFET_EXPORT_H_
diff --git a/buffet/libbuffet/libbuffet.pc.in b/buffet/libbuffet/libbuffet.pc.in
new file mode 100644
index 0000000..6391ea2
--- /dev/null
+++ b/buffet/libbuffet/libbuffet.pc.in
@@ -0,0 +1,7 @@
+bslot=@BSLOT@
+
+Name: libbuffet
+Description: Buffet interface library
+Version: ${bslot}
+Requires.private: @PRIVATE_PC@
+Libs: -lbuffet-${bslot}
diff --git a/buffet/libbuffet/preinstall.sh b/buffet/libbuffet/preinstall.sh
new file mode 100755
index 0000000..960d81e
--- /dev/null
+++ b/buffet/libbuffet/preinstall.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# 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.
+
+set -e
+
+OUT=$1
+v=$2
+
+deps=$(<"${OUT}"/gen/libbuffet-${v}-deps.txt)
+sed \
+  -e "s/@BSLOT@/${v}/g" \
+  -e "s/@PRIVATE_PC@/${deps}/g" \
+  "libbuffet/libbuffet.pc.in" > "${OUT}/lib/libbuffet-${v}.pc"
diff --git a/buffet/libbuffet/private/command_property_set.h b/buffet/libbuffet/private/command_property_set.h
new file mode 100644
index 0000000..217458c
--- /dev/null
+++ b/buffet/libbuffet/private/command_property_set.h
@@ -0,0 +1,55 @@
+// 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_LIBBUFFET_PRIVATE_COMMAND_PROPERTY_SET_H_
+#define BUFFET_LIBBUFFET_PRIVATE_COMMAND_PROPERTY_SET_H_
+
+#include <string>
+
+#include <base/macros.h>
+#include <chromeos/any.h>
+#include <chromeos/dbus/data_serialization.h>
+#include <dbus/object_manager.h>
+
+#include "buffet/libbuffet/export.h"
+
+namespace dbus {
+// Specialize dbus::Property for chromeos::dbus_utils::Dictionary type.
+template class Property<chromeos::dbus_utils::Dictionary>;
+
+template <>
+inline bool Property<chromeos::dbus_utils::Dictionary>::PopValueFromReader(
+    MessageReader* reader) {
+  return chromeos::dbus_utils::PopVariantValueFromReader(reader, &value_);
+}
+
+template <>
+inline void Property<chromeos::dbus_utils::Dictionary>::AppendSetValueToWriter(
+    MessageWriter* writer) {
+  chromeos::dbus_utils::AppendValueToWriterAsVariant(writer, set_value_);
+}
+}  // namespace dbus
+
+namespace buffet {
+
+// PropertySet for remote D-Bus GCD Command object from Buffet daemon.
+class CommandPropertySet : public dbus::PropertySet {
+ public:
+  CommandPropertySet(dbus::ObjectProxy* object_proxy,
+                     const std::string& interface_name,
+                     const PropertyChangedCallback& callback);
+  dbus::Property<std::string> id;
+  dbus::Property<std::string> name;
+  dbus::Property<std::string> category;
+  dbus::Property<std::string> status;
+  dbus::Property<int32_t> progress;
+  dbus::Property<chromeos::dbus_utils::Dictionary> parameters;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CommandPropertySet);
+};
+
+}  // namespace buffet
+
+#endif  // BUFFET_LIBBUFFET_PRIVATE_COMMAND_PROPERTY_SET_H_
