diff --git a/libweave/include/weave/cloud.h b/libweave/include/weave/cloud.h
index ade4247..d3c9500 100644
--- a/libweave/include/weave/cloud.h
+++ b/libweave/include/weave/cloud.h
@@ -10,6 +10,7 @@
 #include <base/callback.h>
 #include <base/values.h>
 #include <weave/error.h>
+#include <weave/settings.h>
 
 namespace weave {
 
@@ -46,16 +47,14 @@
                                      ErrorPtr* error) = 0;
 
   // Updates basic device information.
-  virtual bool UpdateDeviceInfo(const std::string& name,
+  virtual void UpdateDeviceInfo(const std::string& name,
                                 const std::string& description,
-                                const std::string& location,
-                                ErrorPtr* error) = 0;
+                                const std::string& location) = 0;
 
   // Updates base device config.
-  virtual bool UpdateBaseConfig(const std::string& anonymous_access_role,
+  virtual void UpdateBaseConfig(AuthScope anonymous_access_role,
                                 bool local_discovery_enabled,
-                                bool local_pairing_enabled,
-                                ErrorPtr* error) = 0;
+                                bool local_pairing_enabled) = 0;
 
   // Updates GCD service configuration. Usually for testing.
   virtual bool UpdateServiceConfig(const std::string& client_id,
diff --git a/libweave/include/weave/settings.h b/libweave/include/weave/settings.h
index 2b38c91..c4352f0 100644
--- a/libweave/include/weave/settings.h
+++ b/libweave/include/weave/settings.h
@@ -13,6 +13,14 @@
 
 namespace weave {
 
+// Scopes in order of increasing privileges.
+enum class AuthScope {
+  kNone,
+  kViewer,
+  kUser,
+  kOwner,
+};
+
 struct Settings {
   // Model specific information. Must be set by ConfigStore::LoadDefaults.
   std::string firmware_version;
@@ -32,7 +40,7 @@
 
   // Options mirrored into "base" state.
   // Maximum role for local anonymous user.
-  std::string local_anonymous_access_role;
+  AuthScope local_anonymous_access_role{AuthScope::kViewer};
   // If true, allows local discovery using DNS-SD.
   bool local_discovery_enabled{true};
   // If true, allows local pairing using Privet API.
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index 6db8628..eb76919 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -53,7 +53,8 @@
   command->SetProgress(base::DictionaryValue{}, nullptr);
 
   const auto& settings = device_info_->GetSettings();
-  std::string anonymous_access_role{settings.local_anonymous_access_role};
+  std::string anonymous_access_role{
+      EnumToString(settings.local_anonymous_access_role)};
   bool discovery_enabled{settings.local_discovery_enabled};
   bool pairing_enabled{settings.local_pairing_enabled};
 
@@ -62,18 +63,22 @@
   parameters->GetBoolean("localDiscoveryEnabled", &discovery_enabled);
   parameters->GetBoolean("localPairingEnabled", &pairing_enabled);
 
-  if (!device_info_->UpdateBaseConfig(anonymous_access_role, discovery_enabled,
-                                      pairing_enabled, nullptr)) {
+  AuthScope auth_scope{AuthScope::kNone};
+  if (!StringToEnum(anonymous_access_role, &auth_scope)) {
     return command->Abort();
   }
 
+  device_info_->UpdateBaseConfig(auth_scope, discovery_enabled,
+                                 pairing_enabled);
+
   command->Done();
 }
 
 void BaseApiHandler::OnConfigChanged(const Settings& settings) {
   base::DictionaryValue state;
-  state.SetStringWithoutPathExpansion(kBaseStateAnonymousAccessRole,
-                                      settings.local_anonymous_access_role);
+  state.SetStringWithoutPathExpansion(
+      kBaseStateAnonymousAccessRole,
+      EnumToString(settings.local_anonymous_access_role));
   state.SetBooleanWithoutPathExpansion(kBaseStateDiscoveryEnabled,
                                        settings.local_discovery_enabled);
   state.SetBooleanWithoutPathExpansion(kBaseStatePairingEnabled,
@@ -94,10 +99,7 @@
   parameters->GetString("description", &description);
   parameters->GetString("location", &location);
 
-  if (!device_info_->UpdateDeviceInfo(name, description, location, nullptr)) {
-    return command->Abort();
-  }
-
+  device_info_->UpdateDeviceInfo(name, description, location);
   command->Done();
 }
 
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc
index 5e2f68e..1dc843d 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -119,7 +119,7 @@
       'localPairingEnabled': false
     }
   })");
-  EXPECT_EQ("none", settings.local_anonymous_access_role);
+  EXPECT_EQ(AuthScope::kNone, settings.local_anonymous_access_role);
   EXPECT_FALSE(settings.local_discovery_enabled);
   EXPECT_FALSE(settings.local_pairing_enabled);
 
@@ -142,7 +142,7 @@
       'localPairingEnabled': true
     }
   })");
-  EXPECT_EQ("user", settings.local_anonymous_access_role);
+  EXPECT_EQ(AuthScope::kUser, settings.local_anonymous_access_role);
   EXPECT_TRUE(settings.local_discovery_enabled);
   EXPECT_TRUE(settings.local_pairing_enabled);
   expected = R"({
@@ -158,7 +158,7 @@
 
   {
     Config::Transaction change{dev_reg_->GetMutableConfig()};
-    change.set_local_anonymous_access_role("viewer");
+    change.set_local_anonymous_access_role(AuthScope::kViewer);
   }
   expected = R"({
     'base': {
diff --git a/libweave/src/config.cc b/libweave/src/config.cc
index e01e486..b0ec45d 100644
--- a/libweave/src/config.cc
+++ b/libweave/src/config.cc
@@ -42,16 +42,11 @@
 
 namespace {
 
-bool IsValidAccessRole(const std::string& role) {
-  privet::AuthScope scope;
-  return StringToEnum(role, &scope);
-}
-
 Config::Settings CreateDefaultSettings() {
   Config::Settings result;
   result.oauth_url = "https://accounts.google.com/o/oauth2/";
   result.service_url = "https://www.googleapis.com/clouddevices/v1/";
-  result.local_anonymous_access_role = "viewer";
+  result.local_anonymous_access_role = AuthScope::kViewer;
   result.pairing_modes.emplace(PairingType::kPinCode);
   return result;
 }
@@ -98,8 +93,6 @@
   CHECK(!settings_.model_id.empty());
   CHECK(!settings_.name.empty());
 
-  CHECK(IsValidAccessRole(settings_.local_anonymous_access_role))
-      << "Invalid role: " << settings_.local_anonymous_access_role;
   CHECK_EQ(
       settings_.embedded_code.empty(),
       std::find(settings_.pairing_modes.begin(), settings_.pairing_modes.end(),
@@ -156,8 +149,11 @@
   if (dict->GetString(config_keys::kLocation, &tmp))
     set_location(tmp);
 
-  if (dict->GetString(config_keys::kLocalAnonymousAccessRole, &tmp))
-    set_local_anonymous_access_role(tmp);
+  AuthScope scope{AuthScope::kNone};
+  if (dict->GetString(config_keys::kLocalAnonymousAccessRole, &tmp) &&
+      StringToEnum(tmp, &scope)) {
+    set_local_anonymous_access_role(scope);
+  }
 
   if (dict->GetBoolean(config_keys::kLocalDiscoveryEnabled, &tmp_bool))
     set_local_discovery_enabled(tmp_bool);
@@ -201,7 +197,7 @@
   dict.SetString(config_keys::kDescription, settings_.description);
   dict.SetString(config_keys::kLocation, settings_.location);
   dict.SetString(config_keys::kLocalAnonymousAccessRole,
-                 settings_.local_anonymous_access_role);
+                 EnumToString(settings_.local_anonymous_access_role));
   dict.SetBoolean(config_keys::kLocalDiscoveryEnabled,
                   settings_.local_discovery_enabled);
   dict.SetBoolean(config_keys::kLocalPairingEnabled,
@@ -218,16 +214,6 @@
   Commit();
 }
 
-bool Config::Transaction::set_local_anonymous_access_role(
-    const std::string& role) {
-  if (!IsValidAccessRole(role)) {
-    LOG(ERROR) << "Invalid role: " << role;
-    return false;
-  }
-  settings_->local_anonymous_access_role = role;
-  return true;
-}
-
 void Config::Transaction::Commit() {
   if (!config_)
     return;
diff --git a/libweave/src/config.h b/libweave/src/config.h
index 5baff87..13e50da 100644
--- a/libweave/src/config.h
+++ b/libweave/src/config.h
@@ -68,7 +68,9 @@
     void set_location(const std::string& location) {
       settings_->location = location;
     }
-    bool set_local_anonymous_access_role(const std::string& role);
+    void set_local_anonymous_access_role(AuthScope role) {
+      settings_->local_anonymous_access_role = role;
+    }
     void set_local_discovery_enabled(bool enabled) {
       settings_->local_discovery_enabled = enabled;
     }
diff --git a/libweave/src/config_unittest.cc b/libweave/src/config_unittest.cc
index 2639c22..f6f4fa0 100644
--- a/libweave/src/config_unittest.cc
+++ b/libweave/src/config_unittest.cc
@@ -68,7 +68,7 @@
   EXPECT_EQ("", GetSettings().name);
   EXPECT_EQ("", GetSettings().description);
   EXPECT_EQ("", GetSettings().location);
-  EXPECT_EQ("viewer", GetSettings().local_anonymous_access_role);
+  EXPECT_EQ(AuthScope::kViewer, GetSettings().local_anonymous_access_role);
   EXPECT_TRUE(GetSettings().local_pairing_enabled);
   EXPECT_TRUE(GetSettings().local_discovery_enabled);
   EXPECT_EQ("", GetSettings().cloud_id);
@@ -121,7 +121,7 @@
   EXPECT_EQ("state_name", GetSettings().name);
   EXPECT_EQ("state_description", GetSettings().description);
   EXPECT_EQ("state_location", GetSettings().location);
-  EXPECT_EQ("user", GetSettings().local_anonymous_access_role);
+  EXPECT_EQ(AuthScope::kUser, GetSettings().local_anonymous_access_role);
   EXPECT_FALSE(GetSettings().local_pairing_enabled);
   EXPECT_FALSE(GetSettings().local_discovery_enabled);
   EXPECT_EQ("state_cloud_id", GetSettings().cloud_id);
@@ -158,14 +158,14 @@
   change.set_location("set_location");
   EXPECT_EQ("set_location", GetSettings().location);
 
-  change.set_local_anonymous_access_role("viewer");
-  EXPECT_EQ("viewer", GetSettings().local_anonymous_access_role);
+  change.set_local_anonymous_access_role(AuthScope::kViewer);
+  EXPECT_EQ(AuthScope::kViewer, GetSettings().local_anonymous_access_role);
 
-  change.set_local_anonymous_access_role("none");
-  EXPECT_EQ("none", GetSettings().local_anonymous_access_role);
+  change.set_local_anonymous_access_role(AuthScope::kNone);
+  EXPECT_EQ(AuthScope::kNone, GetSettings().local_anonymous_access_role);
 
-  change.set_local_anonymous_access_role("user");
-  EXPECT_EQ("user", GetSettings().local_anonymous_access_role);
+  change.set_local_anonymous_access_role(AuthScope::kUser);
+  EXPECT_EQ(AuthScope::kUser, GetSettings().local_anonymous_access_role);
 
   change.set_local_discovery_enabled(false);
   EXPECT_FALSE(GetSettings().local_discovery_enabled);
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index f1f94d0..a5799d4 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -807,10 +807,9 @@
   PublishStateUpdates();
 }
 
-bool DeviceRegistrationInfo::UpdateDeviceInfo(const std::string& name,
+void DeviceRegistrationInfo::UpdateDeviceInfo(const std::string& name,
                                               const std::string& description,
-                                              const std::string& location,
-                                              ErrorPtr* error) {
+                                              const std::string& location) {
   Config::Transaction change{config_.get()};
   change.set_name(name);
   change.set_description(description);
@@ -821,27 +820,15 @@
     UpdateDeviceResource(base::Bind(&base::DoNothing),
                          base::Bind(&IgnoreCloudError));
   }
-
-  return true;
 }
 
-bool DeviceRegistrationInfo::UpdateBaseConfig(
-    const std::string& anonymous_access_role,
-    bool local_discovery_enabled,
-    bool local_pairing_enabled,
-    ErrorPtr* error) {
+void DeviceRegistrationInfo::UpdateBaseConfig(AuthScope anonymous_access_role,
+                                              bool local_discovery_enabled,
+                                              bool local_pairing_enabled) {
   Config::Transaction change(config_.get());
-  if (!change.set_local_anonymous_access_role(anonymous_access_role)) {
-    Error::AddToPrintf(error, FROM_HERE, errors::kErrorDomain,
-                       "invalid_parameter", "Invalid role: %s",
-                       anonymous_access_role.c_str());
-    return false;
-  }
-
+  change.set_local_anonymous_access_role(anonymous_access_role);
   change.set_local_discovery_enabled(local_discovery_enabled);
   change.set_local_pairing_enabled(local_pairing_enabled);
-
-  return true;
 }
 
 bool DeviceRegistrationInfo::UpdateServiceConfig(
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h
index bd08ecd..77820e0 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -72,14 +72,12 @@
       const OnCloudRequestErrorCallback& error_callback) override;
   std::string RegisterDevice(const std::string& ticket_id,
                              ErrorPtr* error) override;
-  bool UpdateDeviceInfo(const std::string& name,
+  void UpdateDeviceInfo(const std::string& name,
                         const std::string& description,
-                        const std::string& location,
-                        ErrorPtr* error) override;
-  bool UpdateBaseConfig(const std::string& anonymous_access_role,
+                        const std::string& location) override;
+  void UpdateBaseConfig(AuthScope anonymous_access_role,
                         bool local_discovery_enabled,
-                        bool local_pairing_enabled,
-                        ErrorPtr* error) override;
+                        bool local_pairing_enabled) override;
   bool UpdateServiceConfig(const std::string& client_id,
                            const std::string& client_secret,
                            const std::string& api_key,
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index 1a84558..2a059fb 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -140,7 +140,7 @@
           settings->name = "Coffee Pot";
           settings->description = "Easy to clean";
           settings->location = "Kitchen";
-          settings->local_anonymous_access_role = "viewer";
+          settings->local_anonymous_access_role = AuthScope::kViewer;
           settings->model_id = "AAAAA";
           settings->oauth_url = test_data::kOAuthURL;
           settings->service_url = test_data::kServiceURL;
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 1f69581..cccb6ce 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -82,13 +82,8 @@
 
   void UpdateDeviceInfo(const std::string& name,
                         const std::string& description,
-                        const std::string& location,
-                        const SuccessCallback& success_callback,
-                        const ErrorCallback& error_callback) override {
-    ErrorPtr error;
-    if (!device_->UpdateDeviceInfo(name, description, location, &error))
-      return error_callback.Run(error.get());
-    success_callback.Run();
+                        const std::string& location) override {
+    device_->UpdateDeviceInfo(name, description, location);
   }
 
   std::string GetOemName() const override {
@@ -109,12 +104,7 @@
   }
 
   AuthScope GetAnonymousMaxScope() const override {
-    AuthScope scope;
-    if (StringToEnum(device_->GetSettings().local_anonymous_access_role,
-                     &scope)) {
-      return scope;
-    }
-    return AuthScope::kNone;
+    return device_->GetSettings().local_anonymous_access_role;
   }
 
   const ConnectionState& GetConnectionState() const override {
diff --git a/libweave/src/privet/cloud_delegate.h b/libweave/src/privet/cloud_delegate.h
index 9069fb3..24c98fb 100644
--- a/libweave/src/privet/cloud_delegate.h
+++ b/libweave/src/privet/cloud_delegate.h
@@ -66,9 +66,7 @@
   // Update basic device information.
   virtual void UpdateDeviceInfo(const std::string& name,
                                 const std::string& description,
-                                const std::string& location,
-                                const SuccessCallback& success_callback,
-                                const ErrorCallback& error_callback) = 0;
+                                const std::string& location) = 0;
 
   // Returns the name of the maker.
   virtual std::string GetOemName() const = 0;
diff --git a/libweave/src/privet/mock_delegates.h b/libweave/src/privet/mock_delegates.h
index eb4bd6e..1944fbb 100644
--- a/libweave/src/privet/mock_delegates.h
+++ b/libweave/src/privet/mock_delegates.h
@@ -141,12 +141,10 @@
   MOCK_CONST_METHOD0(GetName, std::string());
   MOCK_CONST_METHOD0(GetDescription, std::string());
   MOCK_CONST_METHOD0(GetLocation, std::string());
-  MOCK_METHOD5(UpdateDeviceInfo,
+  MOCK_METHOD3(UpdateDeviceInfo,
                void(const std::string&,
                     const std::string&,
-                    const std::string&,
-                    const SuccessCallback&,
-                    const ErrorCallback&));
+                    const std::string&));
   MOCK_CONST_METHOD0(GetOemName, std::string());
   MOCK_CONST_METHOD0(GetModelName, std::string());
   MOCK_CONST_METHOD0(GetServices, std::set<std::string>());
@@ -182,8 +180,7 @@
     EXPECT_CALL(*this, GetName()).WillRepeatedly(Return("TestDevice"));
     EXPECT_CALL(*this, GetDescription()).WillRepeatedly(Return(""));
     EXPECT_CALL(*this, GetLocation()).WillRepeatedly(Return(""));
-    EXPECT_CALL(*this, UpdateDeviceInfo(_, _, _, _, _))
-        .WillRepeatedly(RunCallback<3>());
+    EXPECT_CALL(*this, UpdateDeviceInfo(_, _, _)).WillRepeatedly(Return());
     EXPECT_CALL(*this, GetOemName()).WillRepeatedly(Return("Chromium"));
     EXPECT_CALL(*this, GetModelName()).WillRepeatedly(Return("Brillo"));
     EXPECT_CALL(*this, GetServices())
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 9790c76..4bc4822 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -698,21 +698,9 @@
     registration->GetString(kSetupStartUserKey, &user);
   }
 
-  cloud_->UpdateDeviceInfo(name, description, location,
-                           base::Bind(&PrivetHandler::OnUpdateDeviceInfoDone,
-                                      weak_ptr_factory_.GetWeakPtr(), ssid,
-                                      passphrase, ticket, user, callback),
-                           base::Bind(&OnCommandRequestFailed, callback));
-}
+  cloud_->UpdateDeviceInfo(name, description, location);
 
-void PrivetHandler::OnUpdateDeviceInfoDone(
-    const std::string& ssid,
-    const std::string& passphrase,
-    const std::string& ticket,
-    const std::string& user,
-    const RequestCallback& callback) const {
   ErrorPtr error;
-
   if (!ssid.empty() && !wifi_->ConfigureCredentials(ssid, passphrase, &error))
     return ReturnError(*error, callback);
 
diff --git a/libweave/src/privet/privet_handler.h b/libweave/src/privet/privet_handler.h
index bda4127..125c798 100644
--- a/libweave/src/privet/privet_handler.h
+++ b/libweave/src/privet/privet_handler.h
@@ -28,8 +28,6 @@
 class SecurityDelegate;
 class WifiDelegate;
 
-enum class AuthScope;
-
 // Privet V3 HTTP/HTTPS requests handler.
 // API details at https://developers.google.com/cloud-devices/
 class PrivetHandler : public CloudDelegate::Observer {
@@ -110,11 +108,6 @@
                             const UserInfo& user_info,
                             const RequestCallback& callback);
 
-  void OnUpdateDeviceInfoDone(const std::string& ssid,
-                              const std::string& passphrase,
-                              const std::string& ticket,
-                              const std::string& user,
-                              const RequestCallback& callback) const;
   void ReplyWithSetupStatus(const RequestCallback& callback) const;
 
   CloudDelegate* cloud_ = nullptr;
diff --git a/libweave/src/privet/privet_handler_unittest.cc b/libweave/src/privet/privet_handler_unittest.cc
index 853648c..7f79934 100644
--- a/libweave/src/privet/privet_handler_unittest.cc
+++ b/libweave/src/privet/privet_handler_unittest.cc
@@ -525,8 +525,8 @@
 }
 
 TEST_F(PrivetHandlerSetupTest, SetupNameDescriptionLocation) {
-  EXPECT_CALL(cloud_, UpdateDeviceInfo("testName", "testDescription",
-                                       "testLocation", _, _))
+  EXPECT_CALL(cloud_,
+              UpdateDeviceInfo("testName", "testDescription", "testLocation"))
       .Times(1);
   const char kInput[] = R"({
     'name': 'testName',
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index b5b7d78..3cf0ace 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -15,7 +15,6 @@
 
 namespace {
 
-using privet::AuthScope;
 using privet::ConnectionState;
 using privet::CryptoType;
 using privet::SetupState;
diff --git a/libweave/src/privet/privet_types.h b/libweave/src/privet/privet_types.h
index d013500..f9ea8b7 100644
--- a/libweave/src/privet/privet_types.h
+++ b/libweave/src/privet/privet_types.h
@@ -9,6 +9,7 @@
 
 #include <base/logging.h>
 #include <weave/error.h>
+#include <weave/settings.h>
 
 namespace weave {
 namespace privet {
@@ -24,14 +25,6 @@
   kWifi50,
 };
 
-// Scopes in order of increasing privileges.
-enum class AuthScope {
-  kNone,
-  kViewer,
-  kUser,
-  kOwner,
-};
-
 class UserInfo {
  public:
   explicit UserInfo(AuthScope scope = AuthScope::kNone, uint64_t user_id = 0)
