diff --git a/buffet/buffet_config.cc b/buffet/buffet_config.cc
index 1ed7842..d8e0324 100644
--- a/buffet/buffet_config.cc
+++ b/buffet/buffet_config.cc
@@ -7,19 +7,56 @@
 #include <base/logging.h>
 #include <base/strings/string_number_conversions.h>
 
+namespace {
+
+// TODO(vitalybuka): Remove this when deviceKind is gone from server.
+std::string GetDeviceKind(const std::string& manifest_id) {
+  CHECK_EQ(5u, manifest_id.size());
+  std::string kind = manifest_id.substr(0, 2);
+  if (kind == "AC")
+    return "accessPoint";
+  if (kind == "AK")
+    return "aggregator";
+  if (kind == "AM")
+    return "camera";
+  if (kind == "AB")
+    return "developmentBoard";
+  if (kind == "AE")
+    return "printer";
+  if (kind == "AF")
+    return "scanner";
+  if (kind == "AD")
+    return "speaker";
+  if (kind == "AL")
+    return "storage";
+  if (kind == "AJ")
+    return "toy";
+  if (kind == "AA")
+    return "vendor";
+  if (kind == "AN")
+    return "video";
+  LOG(FATAL) << "Invalid model id: " << manifest_id;
+  return std::string();
+}
+
+}  // namespace
+
 namespace buffet {
+
 namespace config_keys {
 
-const char kClientId[]             = "client_id";
-const char kClientSecret[]         = "client_secret";
-const char kApiKey[]               = "api_key";
-const char kOAuthURL[]             = "oauth_url";
-const char kServiceURL[]           = "service_url";
-const char kDeviceKind[]           = "device_kind";
-const char kName[]                 = "name";
-const char kDefaultDescription[]   = "default_description";
-const char kDefaultLocation[]      = "default_location";
-const char kModelId[]              = "model_id";
+const char kClientId[] = "client_id";
+const char kClientSecret[] = "client_secret";
+const char kApiKey[] = "api_key";
+const char kOAuthURL[] = "oauth_url";
+const char kServiceURL[] = "service_url";
+const char kName[] = "name";
+const char kDescription[] = "description";
+const char kLocation[] = "location";
+const char kOemName[] = "oem_name";
+const char kModelName[] = "model_name";
+const char kModelId[] = "model_id";
+
 const char kPollingPeriodMs[]      = "polling_period_ms";
 
 }  // namespace config_keys
@@ -33,22 +70,43 @@
 
 void BuffetConfig::Load(const chromeos::KeyValueStore& store) {
   store.GetString(config_keys::kClientId, &client_id_);
+  CHECK(!client_id_.empty());
+
   store.GetString(config_keys::kClientSecret, &client_secret_);
+  CHECK(!client_secret_.empty());
+
   store.GetString(config_keys::kApiKey, &api_key_);
+  CHECK(!api_key_.empty());
+
   store.GetString(config_keys::kOAuthURL, &oauth_url_);
+  CHECK(!oauth_url_.empty());
+
   store.GetString(config_keys::kServiceURL, &service_url_);
-  store.GetString(config_keys::kDeviceKind, &device_kind_);
-  store.GetString(config_keys::kName, &name_);
-  store.GetString(config_keys::kDefaultDescription, &default_description_);
-  store.GetString(config_keys::kDefaultLocation, &default_location_);
+  CHECK(!service_url_.empty());
+
+  store.GetString(config_keys::kOemName, &oem_name_);
+  CHECK(!oem_name_.empty());
+
+  store.GetString(config_keys::kModelName, &model_name_);
+  CHECK(!model_name_.empty());
+
   store.GetString(config_keys::kModelId, &model_id_);
+  device_kind_ = GetDeviceKind(model_id_);
+
   std::string polling_period_str;
-  if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str)) {
-    CHECK(base::StringToUint64(polling_period_str, &polling_period_ms_))
-        << "Failed to parse polling period in configuration file.";
-    VLOG(1) << "Using a polling period of " << polling_period_ms_
-            << " milliseconds.";
-  }
+  if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str))
+    CHECK(base::StringToUint64(polling_period_str, &polling_period_ms_));
+
+  store.GetString(config_keys::kName, &name_);
+  CHECK(!name_.empty());
+
+  store.GetString(config_keys::kDescription, &description_);
+  store.GetString(config_keys::kLocation, &location_);
+}
+
+void BuffetConfig::set_name(const std::string& name) {
+  CHECK(!name.empty());
+  name_ = name;
 }
 
 }  // namespace buffet
diff --git a/buffet/buffet_config.h b/buffet/buffet_config.h
index af6c849..05545e0 100644
--- a/buffet/buffet_config.h
+++ b/buffet/buffet_config.h
@@ -19,29 +19,40 @@
   void Load(const base::FilePath& config_path);
   void Load(const chromeos::KeyValueStore& store);
 
-  std::string client_id() const { return client_id_; }
-  std::string client_secret() const { return client_secret_; }
-  std::string api_key() const { return api_key_; }
-  std::string oauth_url() const { return oauth_url_; }
-  std::string service_url() const { return service_url_; }
-  std::string device_kind() const { return device_kind_; }
-  std::string name() const { return name_; }
-  std::string default_description() const { return default_description_; }
-  std::string default_location() const { return default_location_; }
-  std::string model_id() const { return model_id_; }
+  const std::string& client_id() const { return client_id_; }
+  const std::string& client_secret() const { return client_secret_; }
+  const std::string& api_key() const { return api_key_; }
+  const std::string& oauth_url() const { return oauth_url_; }
+  const std::string& service_url() const { return service_url_; }
+  const std::string& oem_name() const { return oem_name_; }
+  const std::string& model_name() const { return model_name_; }
+  const std::string& model_id() const { return model_id_; }
+  const std::string& device_kind() const { return device_kind_; }
   uint64_t polling_period_ms() const { return polling_period_ms_; }
 
+  const std::string& name() const { return name_; }
+  const std::string& description() const { return description_; }
+  const std::string& location() const { return location_; }
+
+  void set_name(const std::string& name);
+  void set_description(const std::string& description) {
+    description_ = description;
+  }
+  void set_location(const std::string& location) { location_ = location; }
+
  private:
   std::string client_id_{"58855907228.apps.googleusercontent.com"};
   std::string client_secret_{"eHSAREAHrIqPsHBxCE9zPPBi"};
   std::string api_key_{"AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA"};
   std::string oauth_url_{"https://accounts.google.com/o/oauth2/"};
   std::string service_url_{"https://www.googleapis.com/clouddevices/v1/"};
-  std::string device_kind_{"vendor"};
   std::string name_{"Developer device"};
-  std::string default_description_{"A development device"};
-  std::string default_location_{"my desk"};
-  std::string model_id_{"AAA"};
+  std::string description_;
+  std::string location_;
+  std::string oem_name_{"Chromium"};
+  std::string model_name_{"Brillo"};
+  std::string model_id_{"AAAAA"};
+  std::string device_kind_{"AA"};
   uint64_t polling_period_ms_{7000};
 
   DISALLOW_COPY_AND_ASSIGN(BuffetConfig);
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 9cf3579..ff8db89 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -123,7 +123,7 @@
 DeviceRegistrationInfo::DeviceRegistrationInfo(
     const std::shared_ptr<CommandManager>& command_manager,
     const std::shared_ptr<StateManager>& state_manager,
-    std::unique_ptr<const BuffetConfig> config,
+    std::unique_ptr<BuffetConfig> config,
     const std::shared_ptr<chromeos::http::Transport>& transport,
     const std::shared_ptr<StorageInterface>& state_store,
     bool xmpp_enabled,
@@ -178,29 +178,25 @@
   if (!value || !value->GetAsDictionary(&dict))
     return false;
 
-  // Get the values into temp variables first to make sure we can get
-  // all the data correctly before changing the state of this object.
-  std::string refresh_token;
-  std::string device_id;
-  std::string device_robot_account;
+  // Read all available data before failing.
   std::string name;
-  std::string description;
-  std::string location;
-  if (!dict->GetString(storage_keys::kRefreshToken, &refresh_token) ||
-      !dict->GetString(storage_keys::kDeviceId, &device_id) ||
-      !dict->GetString(storage_keys::kRobotAccount, &device_robot_account) ||
-      !dict->GetString(storage_keys::kName, &name) ||
-      !dict->GetString(storage_keys::kDescription, &description) ||
-      !dict->GetString(storage_keys::kLocation, &location)) {
-    return false;
-  }
-  refresh_token_        = refresh_token;
-  device_robot_account_ = device_robot_account;
-  name_                 = name;
-  description_          = description;
-  location_             = location;
+  if (dict->GetString(storage_keys::kName, &name) && !name.empty())
+    config_->set_name(name);
 
-  SetDeviceId(device_id);
+  std::string description;
+  if (dict->GetString(storage_keys::kDescription, &description))
+    config_->set_description(description);
+
+  std::string location;
+  if (dict->GetString(storage_keys::kLocation, &location))
+    config_->set_location(location);
+
+  dict->GetString(storage_keys::kRefreshToken, &refresh_token_);
+  dict->GetString(storage_keys::kRobotAccount, &device_robot_account_);
+
+  std::string device_id;
+  if (dict->GetString(storage_keys::kDeviceId, &device_id))
+    SetDeviceId(device_id);
 
   if (HaveRegistrationCredentials(nullptr)) {
     // Wait a significant amount of time for local daemons to publish their
@@ -211,7 +207,6 @@
     //             we need not wait for them.
     ScheduleStartDevice(base::TimeDelta::FromSeconds(5));
   }
-
   return true;
 }
 
@@ -220,9 +215,9 @@
   dict.SetString(storage_keys::kRefreshToken, refresh_token_);
   dict.SetString(storage_keys::kDeviceId,     device_id_);
   dict.SetString(storage_keys::kRobotAccount, device_robot_account_);
-  dict.SetString(storage_keys::kName,         name_);
-  dict.SetString(storage_keys::kDescription,  description_);
-  dict.SetString(storage_keys::kLocation,     location_);
+  dict.SetString(storage_keys::kName, config_->name());
+  dict.SetString(storage_keys::kDescription, config_->description());
+  dict.SetString(storage_keys::kLocation, config_->location());
 
   return storage_->Save(&dict);
 }
@@ -400,14 +395,13 @@
   std::unique_ptr<base::DictionaryValue> resource{new base::DictionaryValue};
   if (!device_id_.empty())
     resource->SetString("id", device_id_);
+  resource->SetString("name", config_->name());
+  if (!config_->description().empty())
+    resource->SetString("description", config_->description());
+  if (!config_->location().empty())
+    resource->SetString("location", config_->location());
+  resource->SetString("modelManifestId", config_->model_id());
   resource->SetString("deviceKind", config_->device_kind());
-  resource->SetString("name", name_.empty() ? config_->name() : name_);
-  if (!description_.empty())
-    resource->SetString("description", description_);
-  if (!location_.empty())
-    resource->SetString("location", location_);
-  if (!config_->model_id().empty())
-    resource->SetString("modelManifestId", config_->model_id());
   resource->SetString("channel.supportedType", "xmpp");
   resource->Set("commandDefs", commands.release());
   resource->Set("state", state.release());
@@ -466,11 +460,20 @@
   }
   // These fields are optional, and will default to values from the manufacturer
   // supplied config.
-  GetWithDefault(params, storage_keys::kName, config_->name(), &name_);
-  GetWithDefault(params, storage_keys::kDescription,
-                 config_->default_description(), &description_);
-  GetWithDefault(params, storage_keys::kLocation,
-                 config_->default_location(), &location_);
+  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);
 
   std::unique_ptr<base::DictionaryValue> device_draft =
       BuildDeviceResource(error);
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 1f4c05e..11b8e37 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -51,7 +51,7 @@
   DeviceRegistrationInfo(
       const std::shared_ptr<CommandManager>& command_manager,
       const std::shared_ptr<StateManager>& state_manager,
-      std::unique_ptr<const BuffetConfig> config,
+      std::unique_ptr<BuffetConfig> config,
       const std::shared_ptr<chromeos::http::Transport>& transport,
       const std::shared_ptr<StorageInterface>& state_store,
       bool xmpp_enabled,
@@ -215,11 +215,6 @@
   std::string device_id_;
   std::string device_robot_account_;
 
-  // These fields are user settable and stored in the state store.
-  std::string name_;
-  std::string description_;
-  std::string location_;
-
   // Transient data
   std::string access_token_;
   base::Time access_token_expiration_;
@@ -233,7 +228,7 @@
   // Device state manager.
   std::shared_ptr<StateManager> state_manager_;
 
-  std::unique_ptr<const BuffetConfig> config_;
+  std::unique_ptr<BuffetConfig> config_;
 
   const bool xmpp_enabled_;
   std::unique_ptr<XmppClient> xmpp_client_;
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc
index c800052..2f25d7a 100644
--- a/buffet/device_registration_info_unittest.cc
+++ b/buffet/device_registration_info_unittest.cc
@@ -58,16 +58,6 @@
 
 }  // namespace test_data
 
-// Fill in the storage with default environment information (URLs, etc).
-void InitDefaultStorage(base::DictionaryValue* data) {
-  data->SetString(storage_keys::kRefreshToken, "");
-  data->SetString(storage_keys::kDeviceId, "");
-  data->SetString(storage_keys::kRobotAccount, "");
-  data->SetString(storage_keys::kName, "");
-  data->SetString(storage_keys::kDescription, "");
-  data->SetString(storage_keys::kLocation, "");
-}
-
 // Add the test device registration information.
 void SetDefaultDeviceRegistration(base::DictionaryValue* data) {
   data->SetString(storage_keys::kRefreshToken, test_data::kRefreshToken);
@@ -189,7 +179,6 @@
 class DeviceRegistrationInfoTest : public ::testing::Test {
  protected:
   void SetUp() override {
-    InitDefaultStorage(&data_);
     storage_ = std::make_shared<MemStorage>();
     storage_->Save(&data_);
     transport_ = std::make_shared<chromeos::http::fake::Transport>();
@@ -201,9 +190,9 @@
     config_store.SetString("api_key", test_data::kApiKey);
     config_store.SetString("device_kind",  "vendor");
     config_store.SetString("name",  "Coffee Pot");
-    config_store.SetString("default_description",  "Easy to clean");
-    config_store.SetString("default_location",  "Kitchen");
-    config_store.SetString("model_id", "AAA");
+    config_store.SetString("description", "Easy to clean");
+    config_store.SetString("location", "Kitchen");
+    config_store.SetString("model_id", "AAAAA");
     config_store.SetString("oauth_url", test_data::kOAuthURL);
     config_store.SetString("service_url", test_data::kServiceURL);
     std::unique_ptr<BuffetConfig> config{new BuffetConfig};
@@ -402,7 +391,7 @@
     EXPECT_TRUE(json->GetString("deviceDraft.location", &value));
     EXPECT_EQ("Kitchen", value);
     EXPECT_TRUE(json->GetString("deviceDraft.modelManifestId", &value));
-    EXPECT_EQ("AAA", value);
+    EXPECT_EQ("AAAAA", value);
     EXPECT_TRUE(json->GetString("deviceDraft.name", &value));
     EXPECT_EQ("Coffee Pot", value);
     base::DictionaryValue* commandDefs = nullptr;
