diff --git a/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml b/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
index 249700c..0d9c485 100644
--- a/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
+++ b/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
@@ -21,6 +21,12 @@
       <arg name="device_id" type="s" direction="out"/>
       <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
     </method>
+    <method name="UpdateDeviceInfo">
+      <arg name="name" type="s" direction="in"/>
+      <arg name="description" type="s" direction="in"/>
+      <arg name="location" type="s" direction="in"/>
+      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
+    </method>
     <method name="UpdateState">
       <arg name="property_set" type="a{sv}" direction="in"/>
       <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
@@ -72,5 +78,35 @@
         JSON with command definitions of the devices.
       </tp:docstring>
     </property>
+    <property name="OemName" type="s" access="read">
+      <tp:docstring>
+        Name of the device maker.
+      </tp:docstring>
+    </property>
+    <property name="ModelName" type="s" access="read">
+      <tp:docstring>
+        Name of the device model.
+      </tp:docstring>
+    </property>
+    <property name="ModelId" type="s" access="read">
+      <tp:docstring>
+        Five character code assigned by the cloud registry of device models.
+      </tp:docstring>
+    </property>
+    <property name="Name" type="s" access="read">
+      <tp:docstring>
+        Human readable name of the device. Must not be empty.
+      </tp:docstring>
+    </property>
+    <property name="Description" type="s" access="read">
+      <tp:docstring>
+        Human readable description of the device.
+      </tp:docstring>
+    </property>
+    <property name="Location" type="s" access="read">
+      <tp:docstring>
+        Location of the device.
+      </tp:docstring>
+    </property>
   </interface>
 </node>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index ff8db89..a9601cd 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -25,6 +25,7 @@
 #include "buffet/commands/command_definition.h"
 #include "buffet/commands/command_manager.h"
 #include "buffet/device_registration_storage_keys.h"
+#include "buffet/org.chromium.Buffet.Manager.h"
 #include "buffet/states/state_manager.h"
 #include "buffet/utils.h"
 
@@ -127,14 +128,15 @@
     const std::shared_ptr<chromeos::http::Transport>& transport,
     const std::shared_ptr<StorageInterface>& state_store,
     bool xmpp_enabled,
-    const base::Closure& on_status_changed)
+    org::chromium::Buffet::ManagerAdaptor* manager)
     : transport_{transport},
       storage_{state_store},
       command_manager_{command_manager},
       state_manager_{state_manager},
       config_{std::move(config)},
       xmpp_enabled_{xmpp_enabled},
-      on_status_changed_{on_status_changed} {
+      manager_{manager} {
+  OnConfigChanged();
 }
 
 DeviceRegistrationInfo::~DeviceRegistrationInfo() = default;
@@ -198,6 +200,8 @@
   if (dict->GetString(storage_keys::kDeviceId, &device_id))
     SetDeviceId(device_id);
 
+  OnConfigChanged();
+
   if (HaveRegistrationCredentials(nullptr)) {
     // Wait a significant amount of time for local daemons to publish their
     // state to Buffet before publishing it to the cloud.
@@ -455,25 +459,22 @@
   if (!GetWithDefault(params, "ticket_id", "", &ticket_id)) {
     chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
                            "missing_parameter",
-                           "Need ticket_id parameter for RegisterDevice().");
+                           "Need ticket_id parameter for RegisterDevice()");
     return std::string();
   }
+
   // These fields are optional, and will default to values from the manufacturer
   // supplied config.
   std::string name;
   GetWithDefault(params, storage_keys::kName, config_->name(), &name);
-  if (!name.empty())
-    config_->set_name(name);
-
   std::string description;
   GetWithDefault(params, storage_keys::kDescription, config_->description(),
                  &description);
-  config_->set_description(description);
-
   std::string location;
   GetWithDefault(params, storage_keys::kLocation, config_->location(),
                  &location);
-  config_->set_location(location);
+  if (!UpdateDeviceInfo(name, description, location, error))
+    return std::string();
 
   std::unique_ptr<base::DictionaryValue> device_draft =
       BuildDeviceResource(error);
@@ -745,6 +746,29 @@
   UpdateDeviceResource(fetch_commands_cb, handle_start_device_failure_cb);
 }
 
+bool DeviceRegistrationInfo::UpdateDeviceInfo(const std::string& name,
+                                              const std::string& description,
+                                              const std::string& location,
+                                              chromeos::ErrorPtr* error) {
+  if (name.empty()) {
+    chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
+                           "invalid_parameter", "Empty device name");
+    return false;
+  }
+  config_->set_name(name);
+  config_->set_description(description);
+  config_->set_location(location);
+
+  OnConfigChanged();
+
+  if (HaveRegistrationCredentials(nullptr)) {
+    UpdateDeviceResource(base::Bind(&base::DoNothing),
+                         base::Bind(&IgnoreCloudError));
+  }
+
+  return true;
+}
+
 void DeviceRegistrationInfo::UpdateCommand(
     const std::string& command_id,
     const base::DictionaryValue& command_patch) {
@@ -929,20 +953,28 @@
 
 void DeviceRegistrationInfo::SetRegistrationStatus(
     RegistrationStatus new_status) {
-  if (new_status == registration_status_)
-    return;
-  VLOG(1) << "Changing registration status to " << StatusToString(new_status);
   registration_status_ = new_status;
-  if (!on_status_changed_.is_null())
-    on_status_changed_.Run();
+  if (manager_)
+    manager_->SetStatus(StatusToString(registration_status_));
+  VLOG_IF(1, new_status != registration_status_)
+      << "Changing registration status to " << StatusToString(new_status);
 }
 
 void DeviceRegistrationInfo::SetDeviceId(const std::string& device_id) {
-  if (device_id == device_id_)
-    return;
   device_id_ = device_id;
-  if (!on_status_changed_.is_null())
-    on_status_changed_.Run();
+  if (manager_)
+    manager_->SetDeviceId(device_id_);
+}
+
+void DeviceRegistrationInfo::OnConfigChanged() {
+  if (!manager_)
+    return;
+  manager_->SetOemName(config_->oem_name());
+  manager_->SetModelName(config_->model_name());
+  manager_->SetModelId(config_->model_id());
+  manager_->SetName(config_->name());
+  manager_->SetDescription(config_->description());
+  manager_->SetLocation(config_->location());
 }
 
 }  // namespace buffet
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 11b8e37..e3a4b80 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -25,6 +25,14 @@
 #include "buffet/storage_interface.h"
 #include "buffet/xmpp/xmpp_client.h"
 
+namespace org {
+namespace chromium {
+namespace Buffet {
+class ManagerAdaptor;
+}
+}
+}
+
 namespace base {
 class DictionaryValue;
 }  // namespace base
@@ -55,7 +63,7 @@
       const std::shared_ptr<chromeos::http::Transport>& transport,
       const std::shared_ptr<StorageInterface>& state_store,
       bool xmpp_enabled,
-      const base::Closure& on_status_changed);
+      org::chromium::Buffet::ManagerAdaptor* manager);
 
   ~DeviceRegistrationInfo() override;
 
@@ -134,6 +142,12 @@
   void UpdateCommand(const std::string& command_id,
                      const base::DictionaryValue& command_patch);
 
+  // Updates basic device information.
+  bool UpdateDeviceInfo(const std::string& name,
+                        const std::string& description,
+                        const std::string& location,
+                        chromeos::ErrorPtr* error);
+
  private:
   // Cause DeviceRegistrationInfo to attempt to StartDevice on its own later.
   void ScheduleStartDevice(const base::TimeDelta& later);
@@ -209,6 +223,7 @@
 
   void SetRegistrationStatus(RegistrationStatus new_status);
   void SetDeviceId(const std::string& device_id);
+  void OnConfigChanged();
 
   // Data that is cached here, persisted in the state store.
   std::string refresh_token_;
@@ -236,7 +251,7 @@
 
   // Tracks our current registration status.
   RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured};
-  base::Closure on_status_changed_;
+  org::chromium::Buffet::ManagerAdaptor* manager_;
 
   base::RepeatingTimer<DeviceRegistrationInfo> command_poll_timer_;
   base::RepeatingTimer<DeviceRegistrationInfo> state_push_timer_;
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc
index 2f25d7a..7e09cfd 100644
--- a/buffet/device_registration_info_unittest.cc
+++ b/buffet/device_registration_info_unittest.cc
@@ -197,21 +197,14 @@
     config_store.SetString("service_url", test_data::kServiceURL);
     std::unique_ptr<BuffetConfig> config{new BuffetConfig};
     config->Load(config_store);
-    auto mock_callback = base::Bind(
-        &DeviceRegistrationInfoTest::OnRegistrationStatusChange,
-        base::Unretained(this));
     dev_reg_ = std::unique_ptr<DeviceRegistrationInfo>(
         new DeviceRegistrationInfo(command_manager_, state_manager_,
                                    std::move(config),
                                    transport_, storage_,
                                    true,
-                                   mock_callback));
-    EXPECT_CALL(*this, OnRegistrationStatusChange())
-        .Times(testing::AnyNumber());
+                                   nullptr));
   }
 
-  MOCK_METHOD0(OnRegistrationStatusChange, void());
-
   base::DictionaryValue data_;
   std::shared_ptr<MemStorage> storage_;
   std::shared_ptr<chromeos::http::fake::Transport> transport_;
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 34dad7a..93d3029 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -73,8 +73,7 @@
           chromeos::http::Transport::CreateDefault(),
           std::move(state_store),
           xmpp_enabled,
-          base::Bind(&Manager::OnRegistrationStatusChanged,
-                     base::Unretained(this))));
+          &dbus_adaptor_));
   device_info_->Load();
   dbus_adaptor_.RegisterWithDBusObject(&dbus_object_);
   dbus_object_.RegisterAsync(cb);
@@ -213,10 +212,12 @@
   return message;
 }
 
-void Manager::OnRegistrationStatusChanged() {
-  dbus_adaptor_.SetStatus(
-      StatusToString(device_info_->GetRegistrationStatus()));
-  dbus_adaptor_.SetDeviceId(device_info_->GetDeviceId());
+bool Manager::UpdateDeviceInfo(chromeos::ErrorPtr* error,
+                               const std::string& in_name,
+                               const std::string& in_description,
+                               const std::string& in_location) {
+  return device_info_->UpdateDeviceInfo(in_name, in_description, in_location,
+                                        error);
 }
 
 void Manager::OnCommandDefsChanged() {
diff --git a/buffet/manager.h b/buffet/manager.h
index 6a4f88d..177d3d1 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -32,6 +32,7 @@
 class CommandManager;
 class StateChangeQueue;
 class StateManager;
+class BuffetConfig;
 
 template<typename... Types>
 using DBusMethodResponse =
@@ -56,28 +57,23 @@
 
  private:
   // DBus methods:
-  // Handles calls to org.chromium.Buffet.Manager.CheckDeviceRegistered().
   void CheckDeviceRegistered(DBusMethodResponse<std::string> response) override;
-  // Handles calls to org.chromium.Buffet.Manager.GetDeviceInfo().
   void GetDeviceInfo(DBusMethodResponse<std::string> response) override;
-  // Handles calls to org.chromium.Buffet.Manager.RegisterDevice().
   void RegisterDevice(DBusMethodResponse<std::string> response,
                       const chromeos::VariantDictionary& params) override;
-  // Handles calls to org.chromium.Buffet.Manager.UpdateState().
+  bool UpdateDeviceInfo(chromeos::ErrorPtr* error,
+                        const std::string& in_name,
+                        const std::string& in_description,
+                        const std::string& in_location) override;
   void UpdateState(DBusMethodResponse<> response,
                    const chromeos::VariantDictionary& property_set) override;
-  // Handles calls to org.chromium.Buffet.Manager.GetState().
   bool GetState(chromeos::ErrorPtr* error, std::string* state) override;
-  // Handles calls to org.chromium.Buffet.Manager.AddCommand().
   void AddCommand(DBusMethodResponse<std::string> response,
                   const std::string& json_command) override;
-  // Handles calls to org.chromium.Buffet.Manager.GetCommand().
   void GetCommand(DBusMethodResponse<std::string> response,
                   const std::string& id) override;
-  // Handles calls to org.chromium.Buffet.Manager.Test()
   std::string TestMethod(const std::string& message) override;
 
-  void OnRegistrationStatusChanged();
   void OnCommandDefsChanged();
 
   org::chromium::Buffet::ManagerAdaptor dbus_adaptor_{this};
