diff --git a/garnet/bin/setui/src/json_codec.rs b/garnet/bin/setui/src/json_codec.rs
index 78977ff2ee150985efcda5a7a55cc8fa0044a25f..2d2b2ff46390f513d990a6abbd1ce65a5927a9be 100644
--- a/garnet/bin/setui/src/json_codec.rs
+++ b/garnet/bin/setui/src/json_codec.rs
@@ -123,6 +123,7 @@ fn decode_account(encoded: &Value) -> Result<SettingData, Error> {
 
 const LOGIN_MODE_NONE: u64 = 0;
 const LOGIN_MODE_GUEST_OVERRIDE: u64 = 1;
+const LOGIN_MODE_AUTH_PROVIDER: u64 = 2;
 
 fn encode_login_mode(mode: LoginOverride) -> Result<Value, Error> {
     match mode {
@@ -132,6 +133,9 @@ fn encode_login_mode(mode: LoginOverride) -> Result<Value, Error> {
         LoginOverride::AutologinGuest => {
             return Ok(json!(LOGIN_MODE_GUEST_OVERRIDE));
         }
+        LoginOverride::AuthProvider => {
+            return Ok(json!(LOGIN_MODE_AUTH_PROVIDER));
+        }
     }
 }
 
@@ -145,6 +149,9 @@ fn decode_login_mode(value: &Value) -> Result<LoginOverride, Error> {
                 LOGIN_MODE_GUEST_OVERRIDE => {
                     return Ok(LoginOverride::AutologinGuest);
                 }
+                LOGIN_MODE_AUTH_PROVIDER => {
+                    return Ok(LoginOverride::AuthProvider);
+                }
                 _ => {
                     return Err(format_err!("not a decodable type"));
                 }
diff --git a/garnet/bin/setui/src/main.rs b/garnet/bin/setui/src/main.rs
index da32da390ab49f7ace9e3ff44ae63dfe7de239da..cbfb4107c3ec920b4207f67840b00a2757ef3539 100644
--- a/garnet/bin/setui/src/main.rs
+++ b/garnet/bin/setui/src/main.rs
@@ -44,6 +44,13 @@ fn main() -> Result<(), Error> {
         None,
     )));
 
+    handler.register_adapter(Box::new(SettingAdapter::new(
+        SettingType::Account,
+        Box::new(DefaultStore::new("/data/account.dat".to_string(), Box::new(JsonCodec::new()))),
+        Box::new(process_account_mutation),
+        Some(SettingData::Account(AccountSettings { mode: None })),
+    )));
+
     fs.dir("public").add_fidl_service(move |stream: SetUiServiceRequestStream| {
         let handler_clone = handler.clone();
         fx_log_info!("Connecting to setui_service");
diff --git a/garnet/bin/setui/src/mutation.rs b/garnet/bin/setui/src/mutation.rs
index 0eee85710e2e7b37525ffadc4781b745058c47b6..d3f943300626be5c7abae94303b0297650613297 100644
--- a/garnet/bin/setui/src/mutation.rs
+++ b/garnet/bin/setui/src/mutation.rs
@@ -15,3 +15,19 @@ pub fn process_string_mutation(mutation: &Mutation) -> Result<Option<SettingData
         return Err(format_err!("invalid error"));
     }
 }
+
+pub fn process_account_mutation(mutation: &Mutation) -> Result<Option<SettingData>, Error> {
+    if let Mutation::AccountMutationValue(mutation_info) = mutation {
+        if let Some(operation) = mutation_info.operation {
+            if operation == AccountOperation::SetLoginOverride {
+                return Ok(Some(SettingData::Account(AccountSettings {
+                    mode: mutation_info.login_override,
+                })));
+            }
+        }
+
+        return Ok(None);
+    } else {
+        return Err(format_err!("invalid error"));
+    }
+}
diff --git a/garnet/bin/setui/src/setui_handler.rs b/garnet/bin/setui/src/setui_handler.rs
index e8c3c595e3524a2a713b2140fd6eb486fce5987d..9d1306cd0db9d9d27e0ee51ac005721388618c3f 100644
--- a/garnet/bin/setui/src/setui_handler.rs
+++ b/garnet/bin/setui/src/setui_handler.rs
@@ -202,4 +202,47 @@ mod tests {
             }
         }
     }
+
+    /// A test to verify behavior of the account adapter.
+    #[test]
+    fn test_account() {
+        let mut adapter = SettingAdapter::new(
+            SettingType::Account,
+            Box::new(TestStore::new()),
+            Box::new(process_account_mutation),
+            Some(SettingData::Account(AccountSettings { mode: None })),
+        );
+
+        check_login_override(&adapter, None);
+
+        let override_update = Some(LoginOverride::AutologinGuest);
+
+        adapter.mutate(&Mutation::AccountMutationValue(AccountMutation {
+            operation: Some(AccountOperation::SetLoginOverride),
+            login_override: override_update,
+        }));
+
+        check_login_override(&adapter, override_update);
+    }
+
+    fn check_login_override(adapter: &Adapter, expected_override: Option<LoginOverride>) {
+        let (sender, receiver) = channel();
+
+        // Ensure initial account settings returned.
+        adapter.listen(sender, None);
+
+        let listen_result = receiver.recv();
+        assert!(listen_result.is_ok());
+
+        let data = listen_result.unwrap();
+
+        match data {
+            SettingData::Account(val) => {
+                assert_eq!(val.mode, expected_override);
+            }
+            _ => {
+                panic!("unexpected listen value");
+            }
+        }
+    }
 }
diff --git a/sdk/fidl/fuchsia.setui/mutations.fidl b/sdk/fidl/fuchsia.setui/mutations.fidl
index 2b38579070c2d67d7682d0bc79a781c0b4aa0332..2c0a2cf2a9409a1403f69121a1d24af60e2a6191 100644
--- a/sdk/fidl/fuchsia.setui/mutations.fidl
+++ b/sdk/fidl/fuchsia.setui/mutations.fidl
@@ -24,7 +24,7 @@ enum AccountOperation {
 /// Configuration for account mutations.
 table AccountMutation {
     1: AccountOperation operation;
-    2: LoginOverride login_overide;
+    2: LoginOverride login_override;
 };
 
 /// Operations supported by wireless settings.
diff --git a/sdk/fidl/fuchsia.setui/types.fidl b/sdk/fidl/fuchsia.setui/types.fidl
index 3d59ead8c80925f95944664647423f1086a4d22a..f2d3086c067124cdddce048b0d71719979cea735 100644
--- a/sdk/fidl/fuchsia.setui/types.fidl
+++ b/sdk/fidl/fuchsia.setui/types.fidl
@@ -32,6 +32,8 @@ enum LoginOverride {
     NONE = 0;
     /// Do not require an account and login always as guest.
     AUTOLOGIN_GUEST = 1;
+    /// Requires a provisioned account through auth provider.
+    AUTH_PROVIDER = 2;
 };
 
 table AccountSettings {