diff --git a/components/support/nimbus-fml/src/intermediate_representation.rs b/components/support/nimbus-fml/src/intermediate_representation.rs
index 97d545672..249406a0c 100644
--- a/components/support/nimbus-fml/src/intermediate_representation.rs
+++ b/components/support/nimbus-fml/src/intermediate_representation.rs
@@ -237,10 +237,10 @@ pub struct FeatureManifest {
     pub(crate) about: AboutBlock,

     #[serde(default)]
-    pub(crate) imported_features: HashMap<ModuleId, BTreeSet<String>>,
+    pub(crate) imported_features: BTreeMap<ModuleId, BTreeSet<String>>,

     #[serde(default)]
-    pub(crate) all_imports: HashMap<ModuleId, FeatureManifest>,
+    pub(crate) all_imports: BTreeMap<ModuleId, FeatureManifest>,
 }

 impl TypeFinder for FeatureManifest {
diff --git a/components/support/nimbus-fml/src/parser.rs b/components/support/nimbus-fml/src/parser.rs
index 49cace525..cdf692b86 100644
--- a/components/support/nimbus-fml/src/parser.rs
+++ b/components/support/nimbus-fml/src/parser.rs
@@ -223,7 +223,7 @@ impl Parser {
         &self,
         current: &FilePath,
         channel: Option<&str>,
-        imports: &mut HashMap<ModuleId, FeatureManifest>,
+        imports: &mut BTreeMap<ModuleId, FeatureManifest>,
         // includes: &mut HashSet<ModuleId>,
     ) -> Result<ModuleId> {
         let id = current.try_into()?;
@@ -253,7 +253,7 @@ impl Parser {
         // This loop does the work of merging the default blocks back into the imported manifests.
         // We'll then attach all the manifests to the root (i.e. the one we're generating code for today), in `imports`.
         // We associate only the feature ids with the manifest we're loading in this method.
-        let mut imported_feature_id_map = HashMap::new();
+        let mut imported_feature_id_map = BTreeMap::new();

         for block in &frontend.imports {
             // 1. Load the imported manifests in to the hash map.
@@ -328,7 +328,7 @@ impl Parser {
         &self,
         channel: Option<&str>,
     ) -> Result<FeatureManifest, FMLError> {
-        let mut manifests = HashMap::new();
+        let mut manifests = BTreeMap::new();
         let id = self.load_imports(&self.source, channel, &mut manifests)?;
         let mut fm = manifests
             .remove(&id)
