diff --git a/cc/binary.go b/cc/binary.go
index e982329..f6e62b7 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -17,7 +17,6 @@
 import (
 	"path/filepath"
 
-	"github.com/google/blueprint"
 	"github.com/google/blueprint/proptools"
 
 	"android/soong/android"
@@ -55,13 +54,13 @@
 }
 
 // Module factory for binaries
-func binaryFactory() (blueprint.Module, []interface{}) {
+func binaryFactory() android.Module {
 	module, _ := NewBinary(android.HostAndDeviceSupported)
 	return module.Init()
 }
 
 // Module factory for host binaries
-func binaryHostFactory() (blueprint.Module, []interface{}) {
+func binaryHostFactory() android.Module {
 	module, _ := NewBinary(android.HostSupported)
 	return module.Init()
 }
diff --git a/cc/cc.go b/cc/cc.go
index 867b196..a3f4c1d 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -304,36 +304,38 @@
 	flags Flags
 }
 
-func (c *Module) Init() (blueprint.Module, []interface{}) {
-	props := []interface{}{&c.Properties, &c.unused}
+func (c *Module) Init() android.Module {
+	c.AddProperties(&c.Properties, &c.unused)
 	if c.compiler != nil {
-		props = append(props, c.compiler.compilerProps()...)
+		c.AddProperties(c.compiler.compilerProps()...)
 	}
 	if c.linker != nil {
-		props = append(props, c.linker.linkerProps()...)
+		c.AddProperties(c.linker.linkerProps()...)
 	}
 	if c.installer != nil {
-		props = append(props, c.installer.installerProps()...)
+		c.AddProperties(c.installer.installerProps()...)
 	}
 	if c.stl != nil {
-		props = append(props, c.stl.props()...)
+		c.AddProperties(c.stl.props()...)
 	}
 	if c.sanitize != nil {
-		props = append(props, c.sanitize.props()...)
+		c.AddProperties(c.sanitize.props()...)
 	}
 	if c.coverage != nil {
-		props = append(props, c.coverage.props()...)
+		c.AddProperties(c.coverage.props()...)
 	}
 	if c.sabi != nil {
-		props = append(props, c.sabi.props()...)
+		c.AddProperties(c.sabi.props()...)
 	}
 	for _, feature := range c.features {
-		props = append(props, feature.props()...)
+		c.AddProperties(feature.props()...)
 	}
 
-	_, props = android.InitAndroidArchModule(c, c.hod, c.multilib, props...)
+	android.InitAndroidArchModule(c, c.hod, c.multilib)
 
-	return android.InitDefaultableModule(c, c, props...)
+	android.InitDefaultableModule(c, c)
+
+	return c
 }
 
 // Returns true for dependency roots (binaries)
@@ -1108,14 +1110,15 @@
 func (d *Defaults) DepsMutator(ctx android.BottomUpMutatorContext) {
 }
 
-func defaultsFactory() (blueprint.Module, []interface{}) {
+func defaultsFactory() android.Module {
 	return DefaultsFactory()
 }
 
-func DefaultsFactory(props ...interface{}) (blueprint.Module, []interface{}) {
+func DefaultsFactory(props ...interface{}) android.Module {
 	module := &Defaults{}
 
-	props = append(props,
+	module.AddProperties(props...)
+	module.AddProperties(
 		&BaseProperties{},
 		&BaseCompilerProperties{},
 		&BaseLinkerProperties{},
@@ -1134,7 +1137,9 @@
 		&SAbiProperties{},
 	)
 
-	return android.InitDefaultsModule(module, module, props...)
+	android.InitDefaultsModule(module, module)
+
+	return module
 }
 
 const (
diff --git a/cc/coverage.go b/cc/coverage.go
index b1c8783..0b4188f 100644
--- a/cc/coverage.go
+++ b/cc/coverage.go
@@ -16,6 +16,7 @@
 
 import (
 	"android/soong/android"
+
 	"github.com/google/blueprint"
 )
 
diff --git a/cc/library.go b/cc/library.go
index 0164221..c7c1142 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -108,41 +108,41 @@
 
 // Module factory for combined static + shared libraries, device by default but with possible host
 // support
-func libraryFactory() (blueprint.Module, []interface{}) {
+func libraryFactory() android.Module {
 	module, _ := NewLibrary(android.HostAndDeviceSupported)
 	return module.Init()
 }
 
 // Module factory for static libraries
-func libraryStaticFactory() (blueprint.Module, []interface{}) {
+func libraryStaticFactory() android.Module {
 	module, library := NewLibrary(android.HostAndDeviceSupported)
 	library.BuildOnlyStatic()
 	return module.Init()
 }
 
 // Module factory for shared libraries
-func librarySharedFactory() (blueprint.Module, []interface{}) {
+func librarySharedFactory() android.Module {
 	module, library := NewLibrary(android.HostAndDeviceSupported)
 	library.BuildOnlyShared()
 	return module.Init()
 }
 
 // Module factory for host static libraries
-func libraryHostStaticFactory() (blueprint.Module, []interface{}) {
+func libraryHostStaticFactory() android.Module {
 	module, library := NewLibrary(android.HostSupported)
 	library.BuildOnlyStatic()
 	return module.Init()
 }
 
 // Module factory for host shared libraries
-func libraryHostSharedFactory() (blueprint.Module, []interface{}) {
+func libraryHostSharedFactory() android.Module {
 	module, library := NewLibrary(android.HostSupported)
 	library.BuildOnlyShared()
 	return module.Init()
 }
 
 // Module factory for header-only libraries
-func libraryHeaderFactory() (blueprint.Module, []interface{}) {
+func libraryHeaderFactory() android.Module {
 	module, library := NewLibrary(android.HostAndDeviceSupported)
 	library.HeaderOnly()
 	return module.Init()
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index cde1bc7..66ffc9f 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -18,8 +18,6 @@
 	"path/filepath"
 	"strings"
 
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 )
 
@@ -136,7 +134,7 @@
 	return stub.libraryDecorator.link(ctx, flags, deps, objs)
 }
 
-func newLLndkStubLibrary() (*Module, []interface{}) {
+func newLLndkStubLibrary() *Module {
 	module, library := NewLibrary(android.DeviceSupported)
 	library.BuildOnlyShared()
 	module.stl = nil
@@ -150,13 +148,18 @@
 	module.linker = stub
 	module.installer = nil
 
-	return module, []interface{}{&stub.Properties, &library.MutatedProperties, &library.flagExporter.Properties}
+	module.AddProperties(
+		&stub.Properties,
+		&library.MutatedProperties,
+		&library.flagExporter.Properties)
+
+	return module
 }
 
-func llndkLibraryFactory() (blueprint.Module, []interface{}) {
-	module, properties := newLLndkStubLibrary()
-	return android.InitAndroidArchModule(module, android.DeviceSupported,
-		android.MultilibBoth, properties...)
+func llndkLibraryFactory() android.Module {
+	module := newLLndkStubLibrary()
+	android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibBoth)
+	return module
 }
 
 func init() {
diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go
index 516f6e2..5fa3232 100644
--- a/cc/ndk_headers.go
+++ b/cc/ndk_headers.go
@@ -137,9 +137,11 @@
 	}
 }
 
-func ndkHeadersFactory() (blueprint.Module, []interface{}) {
+func ndkHeadersFactory() android.Module {
 	module := &headerModule{}
-	return android.InitAndroidModule(module, &module.properties)
+	module.AddProperties(&module.properties)
+	android.InitAndroidModule(module)
+	return module
 }
 
 type preprocessedHeaderProperies struct {
@@ -251,12 +253,16 @@
 	return timestampFile
 }
 
-func preprocessedNdkHeadersFactory() (blueprint.Module, []interface{}) {
+func preprocessedNdkHeadersFactory() android.Module {
 	module := &preprocessedHeaderModule{}
+
+	module.AddProperties(&module.properties)
+
 	// Host module rather than device module because device module install steps
 	// do not get run when embedded in make. We're not any of the existing
 	// module types that can be exposed via the Android.mk exporter, so just use
 	// a host module.
-	return android.InitAndroidArchModule(module, android.HostSupportedNoCross,
-		android.MultilibFirst, &module.properties)
+	android.InitAndroidArchModule(module, android.HostSupportedNoCross, android.MultilibFirst)
+
+	return module
 }
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index d801775..5765aa9 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -335,7 +335,7 @@
 	stub.installPath = ctx.InstallFile(installDir, path).String()
 }
 
-func newStubLibrary() (*Module, []interface{}) {
+func newStubLibrary() *Module {
 	module, library := NewLibrary(android.DeviceSupported)
 	library.BuildOnlyShared()
 	module.stl = nil
@@ -349,11 +349,13 @@
 	module.linker = stub
 	module.installer = stub
 
-	return module, []interface{}{&stub.properties, &library.MutatedProperties}
+	module.AddProperties(&stub.properties, &library.MutatedProperties)
+
+	return module
 }
 
-func ndkLibraryFactory() (blueprint.Module, []interface{}) {
-	module, properties := newStubLibrary()
-	return android.InitAndroidArchModule(module, android.DeviceSupported,
-		android.MultilibBoth, properties...)
+func ndkLibraryFactory() android.Module {
+	module := newStubLibrary()
+	android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibBoth)
+	return module
 }
diff --git a/cc/ndk_prebuilt.go b/cc/ndk_prebuilt.go
index 15a9d28..13424e3 100644
--- a/cc/ndk_prebuilt.go
+++ b/cc/ndk_prebuilt.go
@@ -18,8 +18,6 @@
 	"fmt"
 	"strings"
 
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 	"android/soong/cc/config"
 )
@@ -67,7 +65,7 @@
 	return deps
 }
 
-func ndkPrebuiltObjectFactory() (blueprint.Module, []interface{}) {
+func ndkPrebuiltObjectFactory() android.Module {
 	module := newBaseModule(android.DeviceSupported, android.MultilibBoth)
 	module.linker = &ndkPrebuiltObjectLinker{
 		objectLinker: objectLinker{
@@ -101,7 +99,7 @@
 	return deps
 }
 
-func ndkPrebuiltLibraryFactory() (blueprint.Module, []interface{}) {
+func ndkPrebuiltLibraryFactory() android.Module {
 	module, library := NewLibrary(android.DeviceSupported)
 	library.BuildOnlyShared()
 	linker := &ndkPrebuiltLibraryLinker{
@@ -132,7 +130,7 @@
 	ndkPrebuiltLibraryLinker
 }
 
-func ndkPrebuiltSharedStlFactory() (blueprint.Module, []interface{}) {
+func ndkPrebuiltSharedStlFactory() android.Module {
 	module, library := NewLibrary(android.DeviceSupported)
 	library.BuildOnlyShared()
 	linker := &ndkPrebuiltStlLinker{
@@ -147,7 +145,7 @@
 	return module.Init()
 }
 
-func ndkPrebuiltStaticStlFactory() (blueprint.Module, []interface{}) {
+func ndkPrebuiltStaticStlFactory() android.Module {
 	module, library := NewLibrary(android.DeviceSupported)
 	library.BuildOnlyStatic()
 	linker := &ndkPrebuiltStlLinker{
diff --git a/cc/object.go b/cc/object.go
index eaddd89..1478908 100644
--- a/cc/object.go
+++ b/cc/object.go
@@ -17,8 +17,6 @@
 import (
 	"fmt"
 
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 )
 
@@ -35,7 +33,7 @@
 	Properties ObjectLinkerProperties
 }
 
-func objectFactory() (blueprint.Module, []interface{}) {
+func objectFactory() android.Module {
 	module := newBaseModule(android.HostAndDeviceSupported, android.MultilibBoth)
 	module.linker = &objectLinker{
 		baseLinker: NewBaseLinker(),
diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index d064a46..ac05df0 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -16,8 +16,6 @@
 
 import (
 	"android/soong/android"
-
-	"github.com/google/blueprint"
 )
 
 func init() {
@@ -65,7 +63,7 @@
 	return nil
 }
 
-func prebuiltSharedLibraryFactory() (blueprint.Module, []interface{}) {
+func prebuiltSharedLibraryFactory() android.Module {
 	module, _ := NewPrebuiltSharedLibrary(android.HostAndDeviceSupported)
 	return module.Init()
 }
@@ -83,7 +81,7 @@
 	return module, library
 }
 
-func prebuiltStaticLibraryFactory() (blueprint.Module, []interface{}) {
+func prebuiltStaticLibraryFactory() android.Module {
 	module, _ := NewPrebuiltStaticLibrary(android.HostAndDeviceSupported)
 	return module.Init()
 }
@@ -124,7 +122,7 @@
 	return nil
 }
 
-func prebuiltBinaryFactory() (blueprint.Module, []interface{}) {
+func prebuiltBinaryFactory() android.Module {
 	module, _ := NewPrebuiltBinary(android.HostAndDeviceSupported)
 	return module.Init()
 }
diff --git a/cc/sabi.go b/cc/sabi.go
index 92fc7cf..9aff738 100644
--- a/cc/sabi.go
+++ b/cc/sabi.go
@@ -17,9 +17,9 @@
 import (
 	"strings"
 
-	"android/soong/android"
 	"github.com/google/blueprint"
 
+	"android/soong/android"
 	"android/soong/cc/config"
 )
 
diff --git a/cc/test.go b/cc/test.go
index 448f089..ea05ba5 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -20,8 +20,6 @@
 	"strings"
 
 	"android/soong/android"
-
-	"github.com/google/blueprint"
 )
 
 type TestProperties struct {
@@ -57,31 +55,31 @@
 }
 
 // Module factory for tests
-func testFactory() (blueprint.Module, []interface{}) {
+func testFactory() android.Module {
 	module := NewTest(android.HostAndDeviceSupported)
 	return module.Init()
 }
 
 // Module factory for test libraries
-func testLibraryFactory() (blueprint.Module, []interface{}) {
+func testLibraryFactory() android.Module {
 	module := NewTestLibrary(android.HostAndDeviceSupported)
 	return module.Init()
 }
 
 // Module factory for benchmarks
-func benchmarkFactory() (blueprint.Module, []interface{}) {
+func benchmarkFactory() android.Module {
 	module := NewBenchmark(android.HostAndDeviceSupported)
 	return module.Init()
 }
 
 // Module factory for host tests
-func testHostFactory() (blueprint.Module, []interface{}) {
+func testHostFactory() android.Module {
 	module := NewTest(android.HostSupported)
 	return module.Init()
 }
 
 // Module factory for host benchmarks
-func benchmarkHostFactory() (blueprint.Module, []interface{}) {
+func benchmarkHostFactory() android.Module {
 	module := NewBenchmark(android.HostSupported)
 	return module.Init()
 }
diff --git a/cc/test_data_test.go b/cc/test_data_test.go
index 9b5a85a..a798919 100644
--- a/cc/test_data_test.go
+++ b/cc/test_data_test.go
@@ -131,8 +131,10 @@
 				"dir/baz":        nil,
 				"dir/bar/baz":    nil,
 			})
-			ctx.RegisterModuleType("filegroup", genrule.FileGroupFactory)
-			ctx.RegisterModuleType("test", newTest)
+			ctx.RegisterModuleType("filegroup",
+				android.ModuleFactoryAdaptor(genrule.FileGroupFactory))
+			ctx.RegisterModuleType("test",
+				android.ModuleFactoryAdaptor(newTest))
 
 			_, errs := ctx.ParseBlueprintsFiles("Blueprints")
 			fail(t, errs)
@@ -175,9 +177,11 @@
 	}
 }
 
-func newTest() (blueprint.Module, []interface{}) {
+func newTest() android.Module {
 	m := &testDataTest{}
-	return android.InitAndroidModule(m, &m.Properties)
+	m.AddProperties(&m.Properties)
+	android.InitAndroidModule(m)
+	return m
 }
 
 func (test *testDataTest) DepsMutator(ctx android.BottomUpMutatorContext) {
diff --git a/cc/toolchain_library.go b/cc/toolchain_library.go
index 1bbe774..9b83f18 100644
--- a/cc/toolchain_library.go
+++ b/cc/toolchain_library.go
@@ -15,7 +15,6 @@
 package cc
 
 import (
-	"github.com/google/blueprint"
 	"github.com/google/blueprint/proptools"
 
 	"android/soong/android"
@@ -38,7 +37,7 @@
 	return deps
 }
 
-func toolchainLibraryFactory() (blueprint.Module, []interface{}) {
+func toolchainLibraryFactory() android.Module {
 	module, library := NewLibrary(android.HostAndDeviceSupported)
 	library.BuildOnlyStatic()
 	toolchainLibrary := &toolchainLibraryDecorator{
