diff --git a/android/packaging.go b/android/packaging.go
index fe61da1..6677218 100644
--- a/android/packaging.go
+++ b/android/packaging.go
@@ -50,25 +50,6 @@
 	skipInstall bool
 }
 
-func (p *PackagingSpec) Equals(other *PackagingSpec) bool {
-	if other == nil {
-		return false
-	}
-	if p.relPathInPackage != other.relPathInPackage {
-		return false
-	}
-	if p.srcPath != other.srcPath || p.symlinkTarget != other.symlinkTarget {
-		return false
-	}
-	if p.executable != other.executable {
-		return false
-	}
-	if p.partition != other.partition {
-		return false
-	}
-	return true
-}
-
 // Get file name of installed package
 func (p *PackagingSpec) FileName() string {
 	if p.relPathInPackage != "" {
@@ -262,15 +243,9 @@
 					continue
 				}
 			}
-			dstPath := ps.relPathInPackage
-			if existingPs, ok := m[dstPath]; ok {
-				if !existingPs.Equals(&ps) {
-					ctx.ModuleErrorf("packaging conflict at %v:\n%v\n%v", dstPath, existingPs, ps)
-				}
-				continue
+			if _, ok := m[ps.relPathInPackage]; !ok {
+				m[ps.relPathInPackage] = ps
 			}
-
-			m[dstPath] = ps
 		}
 	})
 	return m
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 5bcfce7..cadf9c24 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -137,7 +137,6 @@
 // partitions like system.img. For example, cc_library modules are placed under ./lib[64] directory.
 func filesystemFactory() android.Module {
 	module := &filesystem{}
-	module.filterPackagingSpec = module.filterInstallablePackagingSpec
 	initFilesystemModule(module)
 	return module
 }
@@ -190,12 +189,6 @@
 	return proptools.StringDefault(f.properties.Partition_name, f.Name())
 }
 
-func (f *filesystem) filterInstallablePackagingSpec(ps android.PackagingSpec) bool {
-	// Filesystem module respects the installation semantic. A PackagingSpec from a module with
-	// IsSkipInstall() is skipped.
-	return !ps.SkipInstall()
-}
-
 var pctx = android.NewPackageContext("android/soong/filesystem")
 
 func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) {
diff --git a/filesystem/filesystem_test.go b/filesystem/filesystem_test.go
index acd4813..1215048 100644
--- a/filesystem/filesystem_test.go
+++ b/filesystem/filesystem_test.go
@@ -442,26 +442,3 @@
 		}
 	`)
 }
-
-func TestPreventDuplicatedEntries(t *testing.T) {
-	fixture.ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(
-		"packaging conflict at")).
-		RunTestWithBp(t, `
-		android_filesystem {
-			name: "fs",
-			deps: [
-				"foo",
-				"foo_dup",
-			],
-		}
-
-		cc_binary {
-			name: "foo",
-		}
-
-		cc_binary {
-			name: "foo_dup",
-			stem: "foo",
-		}
-	`)
-}
diff --git a/filesystem/system_image.go b/filesystem/system_image.go
index 15cacfb..5028a49 100644
--- a/filesystem/system_image.go
+++ b/filesystem/system_image.go
@@ -98,5 +98,5 @@
 // Note that "apex" module installs its contents to "apex"(fake partition) as well
 // for symbol lookup by imitating "activated" paths.
 func (s *systemImage) filterPackagingSpec(ps android.PackagingSpec) bool {
-	return s.filesystem.filterInstallablePackagingSpec(ps) && ps.Partition() == "system"
+	return ps.Partition() == "system"
 }
