diff --git a/parse_xml.cpp b/parse_xml.cpp
index 739e344..bca26e1 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -806,9 +806,6 @@
                     SerializeFlags flags) const override {
         appendAttr(root, "version", m.getMetaVersion());
         appendAttr(root, "type", m.mType);
-        if (m.mLevel != Level::UNSPECIFIED) {
-            this->appendAttr(root, "target-level", m.mLevel);
-        }
 
         if (!(flags & SerializeFlag::NO_HALS)) {
             appendChildren(root, manifestHalConverter, m.getHals(), d);
@@ -817,6 +814,9 @@
             if (!(flags & SerializeFlag::NO_SEPOLICY)) {
                 appendChild(root, halManifestSepolicyConverter(m.device.mSepolicyVersion, d));
             }
+            if (m.mLevel != Level::UNSPECIFIED) {
+                this->appendAttr(root, "target-level", m.mLevel);
+            }
         } else if (m.mType == SchemaType::FRAMEWORK) {
             if (!(flags & SerializeFlag::NO_VNDK)) {
 #pragma clang diagnostic push
@@ -841,7 +841,6 @@
         std::vector<ManifestHal> hals;
         if (!parseAttr(root, "version", &object->mMetaVersion, error) ||
             !parseAttr(root, "type", &object->mType, error) ||
-            !parseOptionalAttr(root, "target-level", Level::UNSPECIFIED, &object->mLevel, error) ||
             !parseChildren(root, manifestHalConverter, &hals, error)) {
             return false;
         }
@@ -858,6 +857,11 @@
                                     &object->device.mSepolicyVersion, error)) {
                 return false;
             }
+
+            if (!parseOptionalAttr(root, "target-level", Level::UNSPECIFIED, &object->mLevel,
+                                   error)) {
+                return false;
+            }
         } else if (object->mType == SchemaType::FRAMEWORK) {
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -963,9 +967,6 @@
                     SerializeFlags flags) const override {
         appendAttr(root, "version", m.getMinimumMetaVersion());
         appendAttr(root, "type", m.mType);
-        if (m.mLevel != Level::UNSPECIFIED) {
-            this->appendAttr(root, "level", m.mLevel);
-        }
 
         if (!(flags & SerializeFlag::NO_HALS)) {
             appendChildren(root, matrixHalConverter, iterateValues(m.mHals), d);
@@ -984,6 +985,9 @@
                     appendChild(root, avbConverter(m.framework.mAvbMetaVersion, d));
                 }
             }
+            if (m.mLevel != Level::UNSPECIFIED) {
+                this->appendAttr(root, "level", m.mLevel);
+            }
         } else if (m.mType == SchemaType::DEVICE) {
             if (!(flags & SerializeFlag::NO_VNDK)) {
 #pragma clang diagnostic push
@@ -1015,7 +1019,6 @@
         std::vector<MatrixHal> hals;
         if (!parseAttr(root, "version", &version, error) ||
             !parseAttr(root, "type", &object->mType, error) ||
-            !parseOptionalAttr(root, "level", Level::UNSPECIFIED, &object->mLevel, error) ||
             !parseChildren(root, matrixHalConverter, &hals, error)) {
             return false;
         }
@@ -1045,6 +1048,10 @@
                 seenKernelVersions.insert(minLts);
             }
 
+            if (!parseOptionalAttr(root, "level", Level::UNSPECIFIED, &object->mLevel, error)) {
+                return false;
+            }
+
         } else if (object->mType == SchemaType::DEVICE) {
             // <vndk> can be missing because it can be determined at build time, not hard-coded
             // in the XML file.
