diff --git a/tools/aconfig/src/cache.rs b/tools/aconfig/src/cache.rs
index f7b0f2d..20c5de5 100644
--- a/tools/aconfig/src/cache.rs
+++ b/tools/aconfig/src/cache.rs
@@ -18,14 +18,14 @@
 use serde::{Deserialize, Serialize};
 use std::io::{Read, Write};
 
-use crate::aconfig::{Flag, Override, Permission};
+use crate::aconfig::{Flag, FlagState, Override, Permission};
 use crate::commands::Source;
 
 #[derive(Serialize, Deserialize, Debug)]
 pub struct Item {
     pub id: String,
     pub description: String,
-    pub value: bool,
+    pub state: FlagState,
     pub permission: Permission,
     pub debug: Vec<String>,
 }
@@ -57,13 +57,13 @@
                 source,
             ));
         }
-        let (value, permission) = flag.resolve(self.build_id);
+        let (state, permission) = flag.resolve(self.build_id);
         self.items.push(Item {
             id: flag.id.clone(),
             description: flag.description,
-            value,
+            state,
             permission,
-            debug: vec![format!("{}:{} {:?}", source, value, permission)],
+            debug: vec![format!("{}:{:?} {:?}", source, state, permission)],
         });
         Ok(())
     }
@@ -72,11 +72,11 @@
         let Some(existing_item) = self.items.iter_mut().find(|item| item.id == override_.id) else {
             return Err(anyhow!("failed to override flag {}: unknown flag", override_.id));
         };
-        existing_item.value = override_.value;
+        existing_item.state = override_.state;
         existing_item.permission = override_.permission;
         existing_item
             .debug
-            .push(format!("{}:{} {:?}", source, override_.value, override_.permission));
+            .push(format!("{}:{:?} {:?}", source, override_.state, override_.permission));
         Ok(())
     }
 
@@ -90,7 +90,7 @@
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::aconfig::{Permission, Value};
+    use crate::aconfig::{FlagState, Permission, Value};
 
     #[test]
     fn test_add_flag() {
@@ -101,7 +101,7 @@
                 Flag {
                     id: "foo".to_string(),
                     description: "desc".to_string(),
-                    values: vec![Value::default(true, Permission::ReadOnly)],
+                    values: vec![Value::default(FlagState::Enabled, Permission::ReadOnly)],
                 },
             )
             .unwrap();
@@ -111,7 +111,7 @@
                 Flag {
                     id: "foo".to_string(),
                     description: "desc".to_string(),
-                    values: vec![Value::default(false, Permission::ReadOnly)],
+                    values: vec![Value::default(FlagState::Disabled, Permission::ReadOnly)],
                 },
             )
             .unwrap_err();
@@ -123,16 +123,20 @@
 
     #[test]
     fn test_add_override() {
-        fn check(cache: &Cache, id: &str, expected: (bool, Permission)) -> bool {
+        fn check(cache: &Cache, id: &str, expected: (FlagState, Permission)) -> bool {
             let item = cache.iter().find(|&item| item.id == id).unwrap();
-            item.value == expected.0 && item.permission == expected.1
+            item.state == expected.0 && item.permission == expected.1
         }
 
         let mut cache = Cache::new(1);
         let error = cache
             .add_override(
                 Source::Memory,
-                Override { id: "foo".to_string(), value: true, permission: Permission::ReadOnly },
+                Override {
+                    id: "foo".to_string(),
+                    state: FlagState::Enabled,
+                    permission: Permission::ReadOnly,
+                },
             )
             .unwrap_err();
         assert_eq!(&format!("{:?}", error), "failed to override flag foo: unknown flag");
@@ -143,28 +147,36 @@
                 Flag {
                     id: "foo".to_string(),
                     description: "desc".to_string(),
-                    values: vec![Value::default(true, Permission::ReadOnly)],
+                    values: vec![Value::default(FlagState::Enabled, Permission::ReadOnly)],
                 },
             )
             .unwrap();
         dbg!(&cache);
-        assert!(check(&cache, "foo", (true, Permission::ReadOnly)));
+        assert!(check(&cache, "foo", (FlagState::Enabled, Permission::ReadOnly)));
 
         cache
             .add_override(
                 Source::Memory,
-                Override { id: "foo".to_string(), value: false, permission: Permission::ReadWrite },
+                Override {
+                    id: "foo".to_string(),
+                    state: FlagState::Disabled,
+                    permission: Permission::ReadWrite,
+                },
             )
             .unwrap();
         dbg!(&cache);
-        assert!(check(&cache, "foo", (false, Permission::ReadWrite)));
+        assert!(check(&cache, "foo", (FlagState::Disabled, Permission::ReadWrite)));
 
         cache
             .add_override(
                 Source::Memory,
-                Override { id: "foo".to_string(), value: true, permission: Permission::ReadWrite },
+                Override {
+                    id: "foo".to_string(),
+                    state: FlagState::Enabled,
+                    permission: Permission::ReadWrite,
+                },
             )
             .unwrap();
-        assert!(check(&cache, "foo", (true, Permission::ReadWrite)));
+        assert!(check(&cache, "foo", (FlagState::Enabled, Permission::ReadWrite)));
     }
 }
