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
