diff --git a/tools/aconfig/src/commands.rs b/tools/aconfig/src/commands.rs
index 39e0154..54bc622 100644
--- a/tools/aconfig/src/commands.rs
+++ b/tools/aconfig/src/commands.rs
@@ -24,8 +24,8 @@
 use crate::codegen_java::generate_java_code;
 use crate::codegen_rust::generate_rust_code;
 use crate::protos::{
-    ProtoFlagMetadata, ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag, ProtoParsedFlags,
-    ProtoTracepoint,
+    ParsedFlagExt, ProtoFlagMetadata, ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag,
+    ProtoParsedFlags, ProtoTracepoint,
 };
 
 pub struct Input {
@@ -226,10 +226,9 @@
         .filter(|pf| pf.permission() == ProtoFlagPermission::READ_WRITE)
     {
         let line = format!(
-            "{}:{}.{}={}\n",
+            "{}:{}={}\n",
             parsed_flag.namespace(),
-            parsed_flag.package(),
-            parsed_flag.name(),
+            parsed_flag.fully_qualified_name(),
             match parsed_flag.state() {
                 ProtoFlagState::ENABLED => "enabled",
                 ProtoFlagState::DISABLED => "disabled",
@@ -249,9 +248,8 @@
         .filter(|pf| pf.permission() == ProtoFlagPermission::READ_WRITE)
     {
         let line = format!(
-            "persist.device_config.{}.{}={}\n",
-            parsed_flag.package(),
-            parsed_flag.name(),
+            "persist.device_config.{}={}\n",
+            parsed_flag.fully_qualified_name(),
             match parsed_flag.state() {
                 ProtoFlagState::ENABLED => "true",
                 ProtoFlagState::DISABLED => "false",
@@ -286,9 +284,8 @@
         DumpFormat::Text => {
             for parsed_flag in parsed_flags.parsed_flag.into_iter() {
                 let line = format!(
-                    "{}.{} [{}]: {:?} + {:?}\n",
-                    parsed_flag.package(),
-                    parsed_flag.name(),
+                    "{} [{}]: {:?} + {:?}\n",
+                    parsed_flag.fully_qualified_name(),
                     parsed_flag.container(),
                     parsed_flag.permission(),
                     parsed_flag.state()
@@ -301,9 +298,8 @@
                 let sources: Vec<_> =
                     parsed_flag.trace.iter().map(|tracepoint| tracepoint.source()).collect();
                 let line = format!(
-                    "{}.{} [{}]: {:?} + {:?} ({})\n",
-                    parsed_flag.package(),
-                    parsed_flag.name(),
+                    "{} [{}]: {:?} + {:?} ({})\n",
+                    parsed_flag.fully_qualified_name(),
                     parsed_flag.container(),
                     parsed_flag.permission(),
                     parsed_flag.state(),
@@ -322,9 +318,8 @@
         DumpFormat::Bool => {
             for parsed_flag in parsed_flags.parsed_flag.into_iter() {
                 let line = format!(
-                    "{}.{}={:?}\n",
-                    parsed_flag.package(),
-                    parsed_flag.name(),
+                    "{}={:?}\n",
+                    parsed_flag.fully_qualified_name(),
                     parsed_flag.state() == ProtoFlagState::ENABLED
                 );
                 output.extend_from_slice(line.as_bytes());
