diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index 8acc74c..ed0c390 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -43,52 +43,36 @@
 
 func RegisterCollectFileSystemDepsMutators(ctx android.RegisterMutatorsContext) {
 	ctx.BottomUp("fs_collect_deps", collectDepsMutator).MutatesGlobalState()
-	ctx.BottomUp("fs_set_deps", setDepsMutator)
 }
 
 var fsDepsMutex = sync.Mutex{}
 var collectFsDepsOnceKey = android.NewOnceKey("CollectFsDeps")
 var depCandidatesOnceKey = android.NewOnceKey("DepCandidates")
 
-// List of partitions that the filesystem_creator module currently generates the partition
-var soongGeneratedPartitions = []string{"system"}
-
-// Map of partition module name to its partition that may be generated by Soong.
-// Note that it is not guaranteed that all modules returned by this function are successfully
-// created.
-func getAllSoongGeneratedPartitionNames(config android.Config) map[string]string {
-	ret := map[string]string{}
-	for _, partition := range soongGeneratedPartitions {
-		ret[generatedModuleNameForPartition(config, partition)] = partition
-	}
-	return ret
-}
-
 func collectDepsMutator(mctx android.BottomUpMutatorContext) {
 	// These additional deps are added according to the cuttlefish system image bp.
 	fsDeps := mctx.Config().Once(collectFsDepsOnceKey, func() interface{} {
-		deps := map[string][]string{
-			"system": {
-				"com.android.apex.cts.shim.v1_prebuilt",
-				"dex_bootjars",
-				"framework_compatibility_matrix.device.xml",
-				"idc_data",
-				"init.environ.rc-soong",
-				"keychars_data",
-				"keylayout_data",
-				"libclang_rt.asan",
-				"libcompiler_rt",
-				"libdmabufheap",
-				"libgsi",
-				"llndk.libraries.txt",
-				"logpersist.start",
-				"preloaded-classes",
-				"public.libraries.android.txt",
-				"update_engine_sideload",
-			},
+		deps := []string{
+			"android_vintf_manifest",
+			"com.android.apex.cts.shim.v1_prebuilt",
+			"dex_bootjars",
+			"framework_compatibility_matrix.device.xml",
+			"idc_data",
+			"init.environ.rc-soong",
+			"keychars_data",
+			"keylayout_data",
+			"libclang_rt.asan",
+			"libcompiler_rt",
+			"libdmabufheap",
+			"libgsi",
+			"llndk.libraries.txt",
+			"logpersist.start",
+			"preloaded-classes",
+			"public.libraries.android.txt",
+			"update_engine_sideload",
 		}
 		return &deps
-	}).(*map[string][]string)
+	}).(*[]string)
 
 	depCandidates := mctx.Config().Once(depCandidatesOnceKey, func() interface{} {
 		partitionVars := mctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse
@@ -98,30 +82,10 @@
 
 	m := mctx.Module()
 	if slices.Contains(*depCandidates, m.Name()) {
-		installPartition := getInstallPartition(m, mctx.DeviceConfig())
-		fsDepsMutex.Lock()
-		if _, ok := (*fsDeps)[installPartition]; !ok {
-			(*fsDeps)[installPartition] = make([]string, 0)
-		}
-		if m.Enabled(mctx) {
-			(*fsDeps)[installPartition] = append((*fsDeps)[installPartition], m.Name())
-		}
-		fsDepsMutex.Unlock()
-	}
-}
-
-type depsStruct struct {
-	Deps []string
-}
-
-func setDepsMutator(mctx android.BottomUpMutatorContext) {
-	fsDeps := mctx.Config().Get(collectFsDepsOnceKey).(*map[string][]string)
-	soongGeneratedPartitionMap := getAllSoongGeneratedPartitionNames(mctx.Config())
-	m := mctx.Module()
-	if partition, ok := soongGeneratedPartitionMap[m.Name()]; ok {
-		deps := (*fsDeps)[partition]
-		if err := proptools.AppendMatchingProperties(m.GetProperties(), &depsStruct{Deps: deps}, nil); err != nil {
-			mctx.ModuleErrorf(err.Error())
+		if installInSystem(mctx, m) {
+			fsDepsMutex.Lock()
+			*fsDeps = append(*fsDeps, m.Name())
+			fsDepsMutex.Unlock()
 		}
 	}
 }
@@ -150,7 +114,7 @@
 }
 
 func (f *filesystemCreator) createInternalModules(ctx android.LoadHookContext) {
-	for _, partitionType := range soongGeneratedPartitions {
+	for _, partitionType := range []string{"system"} {
 		if f.createPartition(ctx, partitionType) {
 			f.properties.Generated_partition_types = append(f.properties.Generated_partition_types, partitionType)
 		} else {
@@ -160,7 +124,7 @@
 	f.createDeviceModule(ctx)
 }
 
-func generatedModuleName(cfg android.Config, suffix string) string {
+func (f *filesystemCreator) generatedModuleName(cfg android.Config, suffix string) string {
 	prefix := "soong"
 	if cfg.HasDeviceProduct() {
 		prefix = cfg.DeviceProduct()
@@ -168,21 +132,21 @@
 	return fmt.Sprintf("%s_generated_%s", prefix, suffix)
 }
 
-func generatedModuleNameForPartition(cfg android.Config, partitionType string) string {
-	return generatedModuleName(cfg, fmt.Sprintf("%s_image", partitionType))
+func (f *filesystemCreator) generatedModuleNameForPartition(cfg android.Config, partitionType string) string {
+	return f.generatedModuleName(cfg, fmt.Sprintf("%s_image", partitionType))
 }
 
 func (f *filesystemCreator) createDeviceModule(ctx android.LoadHookContext) {
 	baseProps := &struct {
 		Name *string
 	}{
-		Name: proptools.StringPtr(generatedModuleName(ctx.Config(), "device")),
+		Name: proptools.StringPtr(f.generatedModuleName(ctx.Config(), "device")),
 	}
 
 	// Currently, only the system partition module is created.
 	partitionProps := &filesystem.PartitionNameProperties{}
 	if android.InList("system", f.properties.Generated_partition_types) {
-		partitionProps.System_partition_name = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system"))
+		partitionProps.System_partition_name = proptools.StringPtr(f.generatedModuleNameForPartition(ctx.Config(), "system"))
 	}
 
 	ctx.CreateModule(filesystem.AndroidDeviceFactory, baseProps, partitionProps)
@@ -194,7 +158,7 @@
 	baseProps := &struct {
 		Name *string
 	}{
-		Name: proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), partitionType)),
+		Name: proptools.StringPtr(f.generatedModuleNameForPartition(ctx.Config(), partitionType)),
 	}
 
 	fsProps := &filesystem.FilesystemProperties{}
@@ -231,8 +195,6 @@
 
 	fsProps.Gen_aconfig_flags_pb = proptools.BoolPtr(true)
 
-	fsProps.Is_auto_generated = proptools.BoolPtr(true)
-
 	// Identical to that of the generic_system_image
 	fsProps.Fsverity.Inputs = []string{
 		"etc/boot-image.prof",
@@ -267,7 +229,7 @@
 }
 
 func (f *filesystemCreator) createDiffTest(ctx android.ModuleContext, partitionType string) android.Path {
-	partitionModuleName := generatedModuleNameForPartition(ctx.Config(), partitionType)
+	partitionModuleName := f.generatedModuleNameForPartition(ctx.Config(), partitionType)
 	systemImage := ctx.GetDirectDepWithTag(partitionModuleName, generatedFilesystemDepTag)
 	filesystemInfo, ok := android.OtherModuleProvider(ctx, systemImage, filesystem.FilesystemProvider)
 	if !ok {
@@ -311,7 +273,7 @@
 
 func (f *filesystemCreator) DepsMutator(ctx android.BottomUpMutatorContext) {
 	for _, partitionType := range f.properties.Generated_partition_types {
-		ctx.AddDependency(ctx.Module(), generatedFilesystemDepTag, generatedModuleNameForPartition(ctx.Config(), partitionType))
+		ctx.AddDependency(ctx.Module(), generatedFilesystemDepTag, f.generatedModuleNameForPartition(ctx.Config(), partitionType))
 	}
 }
 
@@ -336,8 +298,11 @@
 	ctx.Phony("soong_generated_filesystem_tests", diffTestFiles...)
 }
 
-func getInstallPartition(m android.Module, config android.DeviceConfig) string {
-	return m.PartitionTag(config)
+func installInSystem(ctx android.BottomUpMutatorContext, m android.Module) bool {
+	return m.PartitionTag(ctx.DeviceConfig()) == "system" && !m.InstallInData() &&
+		!m.InstallInTestcases() && !m.InstallInSanitizerDir() && !m.InstallInVendorRamdisk() &&
+		!m.InstallInDebugRamdisk() && !m.InstallInRecovery() && !m.InstallInOdm() &&
+		!m.InstallInVendor()
 }
 
 // TODO: assemble baseProps and fsProps here
@@ -347,9 +312,9 @@
 		return ""
 	}
 
-	deps := ctx.Config().Get(collectFsDepsOnceKey).(*map[string][]string)
+	deps := ctx.Config().Get(collectFsDepsOnceKey).(*[]string)
 	depProps := &android.PackagingProperties{
-		Deps: android.NewSimpleConfigurable(android.SortedUniqueStrings((*deps)[partitionType])),
+		Deps: android.NewSimpleConfigurable(android.SortedUniqueStrings(*deps)),
 	}
 
 	result, err := proptools.RepackProperties([]interface{}{depProps})
