diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index 0a10afe..002fd5c 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -7,9 +7,20 @@
         'libchromeos-<(libbase_ver)',
       ],
     },
+    'include_dirs': ['.'],
   },
   'targets': [
     {
+      'target_name': 'libbuffet-<(libbase_ver)',
+      'type': 'shared_library',
+      'sources': [
+        'libbuffet/command.cc',
+        'libbuffet/command_listener.cc',
+        'libbuffet/dbus_constants.cc',
+      ],
+      'includes': ['../common-mk/deps.gypi'],
+    },
+    {
       'target_name': 'buffet_common',
       'type': 'static_library',
       'sources': [
@@ -26,7 +37,6 @@
         'commands/prop_values.cc',
         'commands/schema_constants.cc',
         'commands/schema_utils.cc',
-        'dbus_constants.cc',
         'device_registration_info.cc',
         'manager.cc',
         'storage_impls.cc',
@@ -35,22 +45,32 @@
     {
       'target_name': 'buffet',
       'type': 'executable',
+      'dependencies': [
+        'buffet_common',
+        'libbuffet-<(libbase_ver)',
+      ],
       'sources': [
         'main.cc',
       ],
+    },
+    {
+      'target_name': 'buffet_test_daemon',
+      'type': 'executable',
       'dependencies': [
-        'buffet_common',
+        'libbuffet-<(libbase_ver)',
+      ],
+      'sources': [
+        'test_daemon/main.cc',
       ],
     },
     {
       'target_name': 'buffet_client',
       'type': 'executable',
+      'dependencies': [
+        'libbuffet-<(libbase_ver)',
+      ],
       'sources': [
         'buffet_client.cc',
-        'dbus_constants.cc',
-      ],
-      'dependencies': [
-        'buffet_common',
       ],
     },
   ],
@@ -62,6 +82,7 @@
           'type': 'executable',
           'dependencies': [
             'buffet_common',
+            'libbuffet-<(libbase_ver)',
           ],
           'variables': {
             'deps': [
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 14636f8..1b2396b 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -21,7 +21,7 @@
 #include <dbus/object_manager.h>
 #include <dbus/values_util.h>
 
-#include "buffet/dbus_constants.h"
+#include "buffet/libbuffet/dbus_constants.h"
 
 using namespace buffet::dbus_constants;  // NOLINT(build/namespaces)
 
diff --git a/buffet/commands/dbus_command_dispatcher_unittest.cc b/buffet/commands/dbus_command_dispatcher_unittest.cc
index dd52871..170d900 100644
--- a/buffet/commands/dbus_command_dispatcher_unittest.cc
+++ b/buffet/commands/dbus_command_dispatcher_unittest.cc
@@ -16,7 +16,7 @@
 #include "buffet/commands/command_queue.h"
 #include "buffet/commands/dbus_command_dispatcher.h"
 #include "buffet/commands/unittest_utils.h"
-#include "buffet/dbus_constants.h"
+#include "buffet/libbuffet/dbus_constants.h"
 
 using buffet::unittests::CreateDictionaryValue;
 using chromeos::dbus_utils::AsyncEventSequencer;
diff --git a/buffet/commands/dbus_command_proxy.cc b/buffet/commands/dbus_command_proxy.cc
index 1003ce7..4bbf1ab 100644
--- a/buffet/commands/dbus_command_proxy.cc
+++ b/buffet/commands/dbus_command_proxy.cc
@@ -10,7 +10,7 @@
 #include "buffet/commands/command_instance.h"
 #include "buffet/commands/prop_constraints.h"
 #include "buffet/commands/prop_types.h"
-#include "buffet/dbus_constants.h"
+#include "buffet/libbuffet/dbus_constants.h"
 
 using chromeos::dbus_utils::AsyncEventSequencer;
 using chromeos::dbus_utils::ExportedObjectManager;
diff --git a/buffet/commands/dbus_command_proxy_unittest.cc b/buffet/commands/dbus_command_proxy_unittest.cc
index 45a872a..d4550a5 100644
--- a/buffet/commands/dbus_command_proxy_unittest.cc
+++ b/buffet/commands/dbus_command_proxy_unittest.cc
@@ -15,7 +15,7 @@
 #include "buffet/commands/command_instance.h"
 #include "buffet/commands/dbus_command_proxy.h"
 #include "buffet/commands/unittest_utils.h"
-#include "buffet/dbus_constants.h"
+#include "buffet/libbuffet/dbus_constants.h"
 
 using ::testing::AnyNumber;
 using ::testing::Return;
diff --git a/buffet/dbus_constants.h b/buffet/dbus_constants.h
deleted file mode 100644
index 593866b..0000000
--- a/buffet/dbus_constants.h
+++ /dev/null
@@ -1,53 +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_CONSTANTS_H_
-#define BUFFET_DBUS_CONSTANTS_H_
-
-namespace buffet {
-
-namespace dbus_constants {
-
-// The service name claimed by the Buffet daemon.
-extern const char kServiceName[];
-
-// The object at this path implements the ObjectManager interface.
-extern const char kRootServicePath[];
-
-// Interface implemented by the object at kManagerServicePath.
-extern const char kManagerInterface[];
-extern const char kManagerServicePath[];
-
-// Methods exposed as part of kManagerInterface.
-extern const char kManagerCheckDeviceRegistered[];
-extern const char kManagerGetDeviceInfo[];
-extern const char kManagerStartRegisterDevice[];
-extern const char kManagerFinishRegisterDevice[];
-extern const char kManagerUpdateStateMethod[];
-extern const char kManagerAddCommand[];
-extern const char kManagerTestMethod[];
-
-// Interface implemented by the command instance objects.
-extern const char kCommandInterface[];
-extern const char kCommandServicePathPrefix[];
-
-// Methods exposed as part of kCommandInterface.
-extern const char kCommandSetProgress[];
-extern const char kCommandAbort[];
-extern const char kCommandCancel[];
-extern const char kCommandDone[];
-
-// Properties exposed as part of kCommandInterface.
-extern const char kCommandName[];
-extern const char kCommandCategory[];
-extern const char kCommandId[];
-extern const char kCommandStatus[];
-extern const char kCommandProgress[];
-extern const char kCommandParameters[];
-
-}  // namespace dbus_constants
-
-}  // namespace buffet
-
-#endif  // BUFFET_DBUS_CONSTANTS_H_
diff --git a/buffet/etc/buffet/commands/test.json b/buffet/etc/buffet/commands/test.json
new file mode 100644
index 0000000..a12b116
--- /dev/null
+++ b/buffet/etc/buffet/commands/test.json
@@ -0,0 +1,13 @@
+{
+  "base": {
+    "reboot": {
+      "parameters": {
+      }
+    },
+    "_jump": {
+      "parameters": {
+        "height":"integer"
+      }
+    }
+  }
+}
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/dbus_constants.cc b/buffet/libbuffet/dbus_constants.cc
similarity index 97%
rename from buffet/dbus_constants.cc
rename to buffet/libbuffet/dbus_constants.cc
index 07b3b52..be5c16c 100644
--- a/buffet/dbus_constants.cc
+++ b/buffet/libbuffet/dbus_constants.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "buffet/dbus_constants.h"
+#include "libbuffet/dbus_constants.h"
 
 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_
diff --git a/buffet/main.cc b/buffet/main.cc
index 7cb37fb..2eb2e2a 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -10,7 +10,7 @@
 #include <chromeos/daemons/dbus_daemon.h>
 #include <chromeos/syslog_logging.h>
 
-#include "buffet/dbus_constants.h"
+#include "buffet/libbuffet/dbus_constants.h"
 #include "buffet/manager.h"
 
 using chromeos::dbus_utils::AsyncEventSequencer;
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 3b0c4ef..5af35a5 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -20,7 +20,7 @@
 
 #include "buffet/commands/command_instance.h"
 #include "buffet/commands/command_manager.h"
-#include "buffet/dbus_constants.h"
+#include "buffet/libbuffet/dbus_constants.h"
 
 using chromeos::dbus_utils::AsyncEventSequencer;
 using chromeos::dbus_utils::ExportedObjectManager;
diff --git a/buffet/test_daemon/main.cc b/buffet/test_daemon/main.cc
new file mode 100644
index 0000000..2956f16
--- /dev/null
+++ b/buffet/test_daemon/main.cc
@@ -0,0 +1,78 @@
+// 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.
+
+// This is a sample daemon that "handles" Buffet commands.
+// It just prints the information about the command received to stdout and
+// marks the command as processed.
+
+#include <string>
+#include <sysexits.h>
+
+#include <base/bind.h>
+#include <base/command_line.h>
+#include <base/format_macros.h>
+#include <chromeos/daemons/dbus_daemon.h>
+#include <chromeos/map_utils.h>
+#include <chromeos/strings/string_utils.h>
+#include <chromeos/syslog_logging.h>
+
+#include "buffet/libbuffet/command.h"
+#include "buffet/libbuffet/command_listener.h"
+
+class Daemon : public chromeos::DBusDaemon {
+ public:
+  Daemon() = default;
+
+ protected:
+  int OnInit() override;
+  void OnShutdown(int* return_code) override;
+
+ private:
+  buffet::CommandListener command_listener_;
+
+  void OnBuffetCommand(scoped_ptr<buffet::Command> command);
+
+  DISALLOW_COPY_AND_ASSIGN(Daemon);
+};
+
+int Daemon::OnInit() {
+  int return_code = chromeos::DBusDaemon::OnInit();
+  if (return_code != EX_OK)
+    return return_code;
+
+  if (!command_listener_.Init(bus_, base::Bind(&Daemon::OnBuffetCommand,
+                                               base::Unretained(this)))) {
+    return EX_SOFTWARE;
+  }
+
+  printf("Waiting for commands...\n");
+  return EX_OK;
+}
+
+void Daemon::OnShutdown(int* return_code) {
+  printf("Shutting down...\n");
+}
+
+void Daemon::OnBuffetCommand(scoped_ptr<buffet::Command> command) {
+  printf("================================================\n");
+  printf("Command received: %s\n", command->GetName().c_str());
+  printf("        category: %s\n", command->GetCategory().c_str());
+  printf("              ID: %s\n", command->GetID().c_str());
+  printf("          status: %s\n", command->GetStatus().c_str());
+  printf(" # of parameters: %" PRIuS "\n", command->GetParameters().size());
+  auto set = chromeos::GetMapKeys(command->GetParameters());
+  std::string param_names = chromeos::string_utils::Join(
+      ", ", std::vector<std::string>(set.begin(), set.end()));
+  printf(" parameter names: %s\n", param_names.c_str());
+  command->Done();
+}
+
+int main(int argc, char* argv[]) {
+  CommandLine::Init(argc, argv);
+  chromeos::InitLog(chromeos::kLogToSyslog |
+                    chromeos::kLogToStderr |
+                    chromeos::kLogHeader);
+  Daemon daemon;
+  return daemon.Run();
+}
