diff --git a/android/module.go b/android/module.go
index 686a90e..ce995ad 100644
--- a/android/module.go
+++ b/android/module.go
@@ -117,7 +117,6 @@
 	HostRequiredModuleNames() []string
 	TargetRequiredModuleNames() []string
 	VintfFragmentModuleNames(ctx ConfigurableEvaluatorContext) []string
-	VintfFragments(ctx ConfigurableEvaluatorContext) []string
 
 	ConfigurableEvaluator(ctx ConfigurableEvaluatorContext) proptools.ConfigurableEvaluator
 
@@ -1627,10 +1626,6 @@
 	return m.base().commonProperties.Vintf_fragment_modules.GetOrDefault(m.ConfigurableEvaluator(ctx), nil)
 }
 
-func (m *ModuleBase) VintfFragments(ctx ConfigurableEvaluatorContext) []string {
-	return m.base().commonProperties.Vintf_fragments.GetOrDefault(m.ConfigurableEvaluator(ctx), nil)
-}
-
 func (m *ModuleBase) generateVariantTarget(ctx *moduleContext) {
 	namespacePrefix := ctx.Namespace().id
 	if namespacePrefix != "" {
diff --git a/android/module_proxy.go b/android/module_proxy.go
index 30459b9..1f96799 100644
--- a/android/module_proxy.go
+++ b/android/module_proxy.go
@@ -9,8 +9,6 @@
 	module blueprint.ModuleProxy
 }
 
-var _ Module = (*ModuleProxy)(nil)
-
 func (m ModuleProxy) Name() string {
 	return m.module.Name()
 }
@@ -227,7 +225,3 @@
 func (m ModuleProxy) Overrides() []string {
 	panic("method is not implemented on ModuleProxy")
 }
-
-func (m ModuleProxy) VintfFragments(ctx ConfigurableEvaluatorContext) []string {
-	panic("method is not implemented on ModuleProxy")
-}
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index c471da1..c346770 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -71,10 +71,6 @@
 	// For example, GSI system.img contains system_ext and product artifacts and their
 	// relPathInPackage need to be rebased to system/system_ext and system/system_product.
 	ModifyPackagingSpec(spec *android.PackagingSpec)
-
-	// Function to check if the filesystem should not use `vintf_fragments` property,
-	// but use `vintf_fragment` module type instead
-	ShouldUseVintfFragmentModuleOnly() bool
 }
 
 var _ filesystemBuilder = (*filesystem)(nil)
@@ -329,9 +325,6 @@
 
 func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) {
 	validatePartitionType(ctx, f)
-	if f.filesystemBuilder.ShouldUseVintfFragmentModuleOnly() {
-		f.validateVintfFragments(ctx)
-	}
 	switch f.fsType(ctx) {
 	case ext4Type, erofsType, f2fsType:
 		f.output = f.buildImageUsingBuildImage(ctx)
@@ -360,43 +353,6 @@
 	}
 }
 
-func (f *filesystem) validateVintfFragments(ctx android.ModuleContext) {
-	visitedModule := map[string]bool{}
-	packagingSpecs := f.gatherFilteredPackagingSpecs(ctx)
-
-	moduleInFileSystem := func(mod android.Module) bool {
-		for _, ps := range android.OtherModuleProviderOrDefault(
-			ctx, mod, android.InstallFilesProvider).PackagingSpecs {
-			if _, ok := packagingSpecs[ps.RelPathInPackage()]; ok {
-				return true
-			}
-		}
-		return false
-	}
-
-	ctx.WalkDeps(func(child, parent android.Module) bool {
-		if visitedModule[child.Name()] {
-			return false
-		}
-		if !moduleInFileSystem(child) {
-			visitedModule[child.Name()] = true
-			return true
-		}
-		if vintfFragments := child.VintfFragments(ctx); vintfFragments != nil {
-			ctx.PropertyErrorf(
-				"vintf_fragments",
-				"Module %s is referenced by soong-defined filesystem %s with property vintf_fragments(%s) in use."+
-					" Use vintf_fragment_modules property instead.",
-				child.Name(),
-				f.BaseModuleName(),
-				strings.Join(vintfFragments, ", "),
-			)
-		}
-		visitedModule[child.Name()] = true
-		return true
-	})
-}
-
 func (f *filesystem) appendToEntry(ctx android.ModuleContext, installedFile android.Path) {
 	partitionBaseDir := android.PathForModuleOut(ctx, "root", f.partitionName()).String() + "/"
 
@@ -801,10 +757,6 @@
 	f.appendToEntry(ctx, output)
 }
 
-func (f *filesystem) ShouldUseVintfFragmentModuleOnly() bool {
-	return false
-}
-
 type partition interface {
 	PartitionType() string
 }
diff --git a/filesystem/system_image.go b/filesystem/system_image.go
index 60a5133..d03eab4 100644
--- a/filesystem/system_image.go
+++ b/filesystem/system_image.go
@@ -63,7 +63,3 @@
 		(ps.Partition() == "system" || ps.Partition() == "root" ||
 			strings.HasPrefix(ps.Partition(), "system/"))
 }
-
-func (s *systemImage) ShouldUseVintfFragmentModuleOnly() bool {
-	return true
-}
