diff --git a/android/packaging.go b/android/packaging.go
index d455788..acafcd4 100644
--- a/android/packaging.go
+++ b/android/packaging.go
@@ -23,7 +23,6 @@
 	"github.com/google/blueprint"
 	"github.com/google/blueprint/gobtools"
 	"github.com/google/blueprint/proptools"
-	"github.com/google/blueprint/uniquelist"
 )
 
 // PackagingSpec abstracts a request to place a built artifact at a certain path in a package. A
@@ -44,7 +43,7 @@
 	// Whether relPathInPackage should be marked as executable or not
 	executable bool
 
-	effectiveLicenseFiles uniquelist.UniqueList[Path]
+	effectiveLicenseFiles *Paths
 
 	partition string
 
@@ -54,13 +53,13 @@
 	skipInstall bool
 
 	// Paths of aconfig files for the built artifact
-	aconfigPaths uniquelist.UniqueList[Path]
+	aconfigPaths *Paths
 
 	// ArchType of the module which produced this packaging spec
 	archType ArchType
 
 	// List of module names that this packaging spec overrides
-	overrides uniquelist.UniqueList[string]
+	overrides *[]string
 
 	// Name of the module where this packaging spec is output of
 	owner string
@@ -71,12 +70,12 @@
 	SrcPath               Path
 	SymlinkTarget         string
 	Executable            bool
-	EffectiveLicenseFiles Paths
+	EffectiveLicenseFiles *Paths
 	Partition             string
 	SkipInstall           bool
-	AconfigPaths          Paths
+	AconfigPaths          *Paths
 	ArchType              ArchType
-	Overrides             []string
+	Overrides             *[]string
 	Owner                 string
 }
 
@@ -86,12 +85,12 @@
 		SrcPath:               p.srcPath,
 		SymlinkTarget:         p.symlinkTarget,
 		Executable:            p.executable,
-		EffectiveLicenseFiles: p.effectiveLicenseFiles.ToSlice(),
+		EffectiveLicenseFiles: p.effectiveLicenseFiles,
 		Partition:             p.partition,
 		SkipInstall:           p.skipInstall,
-		AconfigPaths:          p.aconfigPaths.ToSlice(),
+		AconfigPaths:          p.aconfigPaths,
 		ArchType:              p.archType,
-		Overrides:             p.overrides.ToSlice(),
+		Overrides:             p.overrides,
 		Owner:                 p.owner,
 	}
 }
@@ -101,12 +100,12 @@
 	p.srcPath = data.SrcPath
 	p.symlinkTarget = data.SymlinkTarget
 	p.executable = data.Executable
-	p.effectiveLicenseFiles = uniquelist.Make(data.EffectiveLicenseFiles)
+	p.effectiveLicenseFiles = data.EffectiveLicenseFiles
 	p.partition = data.Partition
 	p.skipInstall = data.SkipInstall
-	p.aconfigPaths = uniquelist.Make(data.AconfigPaths)
+	p.aconfigPaths = data.AconfigPaths
 	p.archType = data.ArchType
-	p.overrides = uniquelist.Make(data.Overrides)
+	p.overrides = data.Overrides
 	p.owner = data.Owner
 }
 
@@ -156,7 +155,10 @@
 }
 
 func (p *PackagingSpec) EffectiveLicenseFiles() Paths {
-	return p.effectiveLicenseFiles.ToSlice()
+	if p.effectiveLicenseFiles == nil {
+		return Paths{}
+	}
+	return *p.effectiveLicenseFiles
 }
 
 func (p *PackagingSpec) Partition() string {
@@ -169,7 +171,7 @@
 
 // Paths of aconfig files for the built artifact
 func (p *PackagingSpec) GetAconfigPaths() Paths {
-	return p.aconfigPaths.ToSlice()
+	return *p.aconfigPaths
 }
 
 type PackageModule interface {
@@ -434,7 +436,9 @@
 			}
 			all = append(all, ps)
 			depNames = append(depNames, child.Name())
-			overridden = append(overridden, ps.overrides.ToSlice()...)
+			if ps.overrides != nil {
+				overridden = append(overridden, *ps.overrides...)
+			}
 		}
 	})
 
