diff --git a/android/arch.go b/android/arch.go
index effd5a6..67ce30e 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -20,7 +20,6 @@
 	"runtime"
 	"strings"
 
-	"github.com/google/blueprint"
 	"github.com/google/blueprint/proptools"
 )
 
@@ -491,13 +490,11 @@
 
 var archPropTypeMap OncePer
 
-func InitArchModule(m Module,
-	propertyStructs ...interface{}) (blueprint.Module, []interface{}) {
+func InitArchModule(m Module) {
 
 	base := m.base()
 
-	base.generalProperties = append(base.generalProperties,
-		propertyStructs...)
+	base.generalProperties = m.GetProperties()
 
 	for _, properties := range base.generalProperties {
 		propertiesValue := reflect.ValueOf(properties)
@@ -524,17 +521,13 @@
 		}
 	}
 
-	var allProperties []interface{}
-	allProperties = append(allProperties, base.generalProperties...)
 	for _, asp := range base.archProperties {
 		if asp != nil {
-			allProperties = append(allProperties, asp)
+			m.AddProperties(asp)
 		}
 	}
 
-	base.customizableProperties = allProperties
-
-	return m, allProperties
+	base.customizableProperties = m.GetProperties()
 }
 
 var variantReplacer = strings.NewReplacer("-", "_", ".", "_")
diff --git a/android/defaults.go b/android/defaults.go
index df1409e..0776405 100644
--- a/android/defaults.go
+++ b/android/defaults.go
@@ -50,14 +50,11 @@
 
 var _ Defaultable = (*DefaultableModule)(nil)
 
-func InitDefaultableModule(module Module, d Defaultable,
-	props ...interface{}) (blueprint.Module, []interface{}) {
+func InitDefaultableModule(module Module, d Defaultable) {
 
-	d.setProperties(props)
+	d.setProperties(module.GetProperties())
 
-	props = append(props, d.defaults())
-
-	return module, props
+	module.AddProperties(d.defaults())
 }
 
 type DefaultsModule struct {
@@ -79,21 +76,18 @@
 	return d.defaultableProperties
 }
 
-func InitDefaultsModule(module Module, d Defaults, props ...interface{}) (blueprint.Module, []interface{}) {
-	props = append(props,
+func InitDefaultsModule(module Module, d Defaults) {
+	module.AddProperties(
 		&hostAndDeviceProperties{},
 		&commonProperties{},
 		&variableProperties{})
 
-	_, props = InitArchModule(module, props...)
+	InitArchModule(module)
+	InitDefaultableModule(module, d)
 
-	_, props = InitDefaultableModule(module, d, props...)
-
-	props = append(props, &module.base().nameProperties)
+	module.AddProperties(&module.base().nameProperties)
 
 	module.base().module = module
-
-	return module, props
 }
 
 var _ Defaults = (*DefaultsModule)(nil)
diff --git a/android/module.go b/android/module.go
index 8f8f34b..18810fb 100644
--- a/android/module.go
+++ b/android/module.go
@@ -108,6 +108,9 @@
 	InstallInData() bool
 	InstallInSanitizerDir() bool
 	SkipInstall()
+
+	AddProperties(props ...interface{})
+	GetProperties() []interface{}
 }
 
 type nameProperties struct {
@@ -194,24 +197,18 @@
 	NeitherHostNorDeviceSupported
 )
 
-func InitAndroidModule(m Module,
-	propertyStructs ...interface{}) (blueprint.Module, []interface{}) {
-
+func InitAndroidModule(m Module) {
 	base := m.base()
 	base.module = m
 
-	propertyStructs = append(propertyStructs,
+	m.AddProperties(
 		&base.nameProperties,
 		&base.commonProperties,
 		&base.variableProperties)
-
-	return m, propertyStructs
 }
 
-func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib,
-	propertyStructs ...interface{}) (blueprint.Module, []interface{}) {
-
-	_, propertyStructs = InitAndroidModule(m, propertyStructs...)
+func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib) {
+	InitAndroidModule(m)
 
 	base := m.base()
 	base.commonProperties.HostOrDeviceSupported = hod
@@ -225,10 +222,10 @@
 		base.hostAndDeviceProperties.Device_supported = boolPtr(true)
 		fallthrough
 	case HostAndDeviceDefault:
-		propertyStructs = append(propertyStructs, &base.hostAndDeviceProperties)
+		m.AddProperties(&base.hostAndDeviceProperties)
 	}
 
-	return InitArchModule(m, propertyStructs...)
+	InitArchModule(m)
 }
 
 // A ModuleBase object contains the properties that are common to all Android
@@ -250,7 +247,6 @@
 //
 //     import (
 //         "android/soong/android"
-//         "github.com/google/blueprint"
 //     )
 //
 //     type myModule struct {
@@ -260,9 +256,11 @@
 //         }
 //     }
 //
-//     func NewMyModule() (blueprint.Module, []interface{}) {
+//     func NewMyModule() android.Module) {
 //         m := &myModule{}
-//         return android.InitAndroidModule(m, &m.properties)
+//         m.AddProperties(&m.properties)
+//         android.InitAndroidModule(m)
+//         return m
 //     }
 //
 //     func (m *myModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
@@ -274,6 +272,7 @@
 type ModuleBase struct {
 	// Putting the curiously recurring thing pointing to the thing that contains
 	// the thing pattern to good use.
+	// TODO: remove this
 	module Module
 
 	nameProperties          nameProperties
@@ -295,6 +294,16 @@
 	blueprintDir     string
 
 	hooks hooks
+
+	registerProps []interface{}
+}
+
+func (a *ModuleBase) AddProperties(props ...interface{}) {
+	a.registerProps = append(a.registerProps, props...)
+}
+
+func (a *ModuleBase) GetProperties() []interface{} {
+	return a.registerProps
 }
 
 // Name returns the name of the module.  It may be overridden by individual module types, for
diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go
index d09518b..5fa2032 100644
--- a/android/prebuilt_test.go
+++ b/android/prebuilt_test.go
@@ -123,8 +123,8 @@
 	for _, test := range prebuiltsTests {
 		t.Run(test.name, func(t *testing.T) {
 			ctx := NewContext()
-			ctx.RegisterModuleType("prebuilt", newPrebuiltModule)
-			ctx.RegisterModuleType("source", newSourceModule)
+			ctx.RegisterModuleType("prebuilt", ModuleFactoryAdaptor(newPrebuiltModule))
+			ctx.RegisterModuleType("source", ModuleFactoryAdaptor(newSourceModule))
 			ctx.MockFileSystem(map[string][]byte{
 				"Blueprints": []byte(`
 					source {
@@ -183,9 +183,11 @@
 	prebuilt Prebuilt
 }
 
-func newPrebuiltModule() (blueprint.Module, []interface{}) {
+func newPrebuiltModule() Module {
 	m := &prebuiltModule{}
-	return InitAndroidModule(m, &m.prebuilt.Properties)
+	m.AddProperties(&m.prebuilt.Properties)
+	InitAndroidModule(m)
+	return m
 }
 
 func (p *prebuiltModule) Name() string {
@@ -210,9 +212,11 @@
 	dependsOnSourceModule, dependsOnPrebuiltModule bool
 }
 
-func newSourceModule() (blueprint.Module, []interface{}) {
+func newSourceModule() Module {
 	m := &sourceModule{}
-	return InitAndroidModule(m, &m.properties)
+	m.AddProperties(&m.properties)
+	InitAndroidModule(m)
+	return m
 }
 
 func (s *sourceModule) DepsMutator(ctx BottomUpMutatorContext) {
diff --git a/android/register.go b/android/register.go
index 9396664..76a1cc9 100644
--- a/android/register.go
+++ b/android/register.go
@@ -41,8 +41,19 @@
 
 var mutators []*mutator
 
-func RegisterModuleType(name string, factory blueprint.ModuleFactory) {
-	moduleTypes = append(moduleTypes, moduleType{name, factory})
+type ModuleFactory func() Module
+
+// ModuleFactoryAdapter Wraps a ModuleFactory into a blueprint.ModuleFactory by converting an Module
+// into a blueprint.Module and a list of property structs
+func ModuleFactoryAdaptor(factory ModuleFactory) blueprint.ModuleFactory {
+	return func() (blueprint.Module, []interface{}) {
+		module := factory()
+		return module, module.GetProperties()
+	}
+}
+
+func RegisterModuleType(name string, factory ModuleFactory) {
+	moduleTypes = append(moduleTypes, moduleType{name, ModuleFactoryAdaptor(factory)})
 }
 
 func RegisterSingletonType(name string, factory blueprint.SingletonFactory) {
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{
diff --git a/genrule/filegroup.go b/genrule/filegroup.go
index 71c5439..4029134 100644
--- a/genrule/filegroup.go
+++ b/genrule/filegroup.go
@@ -15,8 +15,6 @@
 package genrule
 
 import (
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 )
 
@@ -48,10 +46,11 @@
 // filegroup modules contain a list of files, and can be used to export files across package
 // boundaries.  filegroups (and genrules) can be referenced from srcs properties of other modules
 // using the syntax ":module".
-func FileGroupFactory() (blueprint.Module, []interface{}) {
+func FileGroupFactory() android.Module {
 	module := &fileGroup{}
-
-	return android.InitAndroidModule(module, &module.properties)
+	module.AddProperties(&module.properties)
+	android.InitAndroidModule(module)
+	return module
 }
 
 func (fg *fileGroup) DepsMutator(ctx android.BottomUpMutatorContext) {
diff --git a/genrule/genrule.go b/genrule/genrule.go
index dc4e968..c5de1fd 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -268,17 +268,20 @@
 	}
 }
 
-func generatorFactory(tasks taskFunc, props ...interface{}) (blueprint.Module, []interface{}) {
+func generatorFactory(tasks taskFunc, props ...interface{}) android.Module {
 	module := &generator{
 		tasks: tasks,
 	}
 
-	props = append(props, &module.properties)
+	module.AddProperties(props...)
+	module.AddProperties(&module.properties)
 
-	return android.InitAndroidModule(module, props...)
+	android.InitAndroidModule(module)
+
+	return module
 }
 
-func GenSrcsFactory() (blueprint.Module, []interface{}) {
+func GenSrcsFactory() android.Module {
 	properties := &genSrcsProperties{}
 
 	tasks := func(ctx android.ModuleContext, srcFiles android.Paths) []generateTask {
@@ -300,7 +303,7 @@
 	Output_extension string
 }
 
-func GenRuleFactory() (blueprint.Module, []interface{}) {
+func GenRuleFactory() android.Module {
 	properties := &genRuleProperties{}
 
 	tasks := func(ctx android.ModuleContext, srcFiles android.Paths) []generateTask {
diff --git a/java/app.go b/java/app.go
index f6ccd34..2f2b899 100644
--- a/java/app.go
+++ b/java/app.go
@@ -274,13 +274,16 @@
 	return aaptFlags, aaptDeps, hasResources
 }
 
-func AndroidAppFactory() (blueprint.Module, []interface{}) {
+func AndroidAppFactory() android.Module {
 	module := &AndroidApp{}
 
 	module.deviceProperties.Dex = true
 
-	return android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon,
+	module.AddProperties(
 		&module.Module.properties,
 		&module.Module.deviceProperties,
 		&module.appProperties)
+
+	android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
+	return module
 }
diff --git a/java/java.go b/java/java.go
index 20661c4..3cc552f 100644
--- a/java/java.go
+++ b/java/java.go
@@ -418,21 +418,26 @@
 	j.deps(ctx)
 }
 
-func JavaLibraryFactory() (blueprint.Module, []interface{}) {
+func JavaLibraryFactory() android.Module {
 	module := &JavaLibrary{}
 
 	module.deviceProperties.Dex = true
 
-	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon,
+	module.AddProperties(
 		&module.Module.properties,
 		&module.Module.deviceProperties)
+
+	android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
+	return module
 }
 
-func JavaLibraryHostFactory() (blueprint.Module, []interface{}) {
+func JavaLibraryHostFactory() android.Module {
 	module := &JavaLibrary{}
 
-	return android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon,
-		&module.Module.properties)
+	module.AddProperties(&module.Module.properties)
+
+	android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
+	return module
 }
 
 //
@@ -463,24 +468,30 @@
 	j.deps(ctx)
 }
 
-func JavaBinaryFactory() (blueprint.Module, []interface{}) {
+func JavaBinaryFactory() android.Module {
 	module := &JavaBinary{}
 
 	module.deviceProperties.Dex = true
 
-	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon,
+	module.AddProperties(
 		&module.Module.properties,
 		&module.Module.deviceProperties,
 		&module.binaryProperties)
+
+	android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
+	return module
 }
 
-func JavaBinaryHostFactory() (blueprint.Module, []interface{}) {
+func JavaBinaryHostFactory() android.Module {
 	module := &JavaBinary{}
 
-	return android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon,
+	module.AddProperties(
 		&module.Module.properties,
 		&module.Module.deviceProperties,
 		&module.binaryProperties)
+
+	android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
+	return module
 }
 
 //
@@ -536,11 +547,13 @@
 	return nil
 }
 
-func JavaPrebuiltFactory() (blueprint.Module, []interface{}) {
+func JavaPrebuiltFactory() android.Module {
 	module := &JavaPrebuilt{}
 
-	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported,
-		android.MultilibCommon, &module.properties)
+	module.AddProperties(&module.properties)
+
+	android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
+	return module
 }
 
 //
@@ -576,11 +589,15 @@
 	return j.aidlPreprocessed
 }
 
-func SdkPrebuiltFactory() (blueprint.Module, []interface{}) {
+func SdkPrebuiltFactory() android.Module {
 	module := &sdkPrebuilt{}
 
-	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported,
-		android.MultilibCommon, &module.properties, &module.sdkProperties)
+	module.AddProperties(
+		&module.properties,
+		&module.sdkProperties)
+
+	android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
+	return module
 }
 
 func inList(s string, l []string) bool {
diff --git a/phony/phony.go b/phony/phony.go
index c405af8..79f3a1b 100644
--- a/phony/phony.go
+++ b/phony/phony.go
@@ -19,8 +19,6 @@
 	"io"
 	"strings"
 
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 )
 
@@ -33,10 +31,11 @@
 	requiredModuleNames []string
 }
 
-func phonyFactory() (blueprint.Module, []interface{}) {
+func phonyFactory() android.Module {
 	module := &phony{}
 
-	return android.InitAndroidModule(module)
+	android.InitAndroidModule(module)
+	return module
 }
 
 func (p *phony) DepsMutator(ctx android.BottomUpMutatorContext) {
diff --git a/python/binary.go b/python/binary.go
index 81e8bd9..ae2693b 100644
--- a/python/binary.go
+++ b/python/binary.go
@@ -21,8 +21,6 @@
 	"path/filepath"
 	"strings"
 
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 )
 
@@ -74,15 +72,16 @@
 	stubTemplateHost = "build/soong/python/scripts/stub_template_host.txt"
 )
 
-func PythonBinaryHostFactory() (blueprint.Module, []interface{}) {
+func PythonBinaryHostFactory() android.Module {
 	decorator := &pythonBinaryHostDecorator{
 		pythonDecorator: pythonDecorator{baseInstaller: NewPythonInstaller("bin")}}
 
 	module := &PythonBinaryHost{}
 	module.pythonBaseModule.installer = decorator
+	module.AddProperties(&module.binaryProperties)
 
 	return InitPythonBaseModule(&module.pythonBinaryBase.pythonBaseModule,
-		&module.pythonBinaryBase, android.HostSupportedNoCross, &module.binaryProperties)
+		&module.pythonBinaryBase, android.HostSupportedNoCross)
 }
 
 func (p *pythonBinaryBase) GeneratePythonBuildActions(ctx android.ModuleContext) android.OptionalPath {
diff --git a/python/library.go b/python/library.go
index 0b70756..2039e56 100644
--- a/python/library.go
+++ b/python/library.go
@@ -17,8 +17,6 @@
 // This file contains the module types for building Python library.
 
 import (
-	"github.com/google/blueprint"
-
 	"android/soong/android"
 )
 
@@ -32,7 +30,7 @@
 
 var _ PythonSubModule = (*PythonLibrary)(nil)
 
-func PythonLibraryHostFactory() (blueprint.Module, []interface{}) {
+func PythonLibraryHostFactory() android.Module {
 	module := &PythonLibrary{}
 
 	return InitPythonBaseModule(&module.pythonBaseModule, module, android.HostSupportedNoCross)
diff --git a/python/python.go b/python/python.go
index ab80e4d..df5999d 100644
--- a/python/python.go
+++ b/python/python.go
@@ -152,14 +152,15 @@
 var _ android.AndroidMkDataProvider = (*pythonBaseModule)(nil)
 
 func InitPythonBaseModule(baseModule *pythonBaseModule, subModule PythonSubModule,
-	hod android.HostOrDeviceSupported,
-	props ...interface{}) (blueprint.Module, []interface{}) {
+	hod android.HostOrDeviceSupported) android.Module {
 
 	baseModule.subModule = subModule
 
-	props = append(props, &baseModule.properties)
+	baseModule.AddProperties(&baseModule.properties)
 
-	return android.InitAndroidArchModule(baseModule, hod, android.MultilibCommon, props...)
+	android.InitAndroidArchModule(baseModule, hod, android.MultilibCommon)
+
+	return baseModule
 }
 
 // the tag used to mark dependencies within "py_libs" attribute.
diff --git a/python/python_test.go b/python/python_test.go
index bb407e4..57aaa34 100644
--- a/python/python_test.go
+++ b/python/python_test.go
@@ -313,8 +313,10 @@
 		t.Run(d.desc, func(t *testing.T) {
 			ctx := blueprint.NewContext()
 			android.RegisterTestMutators(ctx)
-			ctx.RegisterModuleType("python_library_host", PythonLibraryHostFactory)
-			ctx.RegisterModuleType("python_binary_host", PythonBinaryHostFactory)
+			ctx.RegisterModuleType("python_library_host",
+				android.ModuleFactoryAdaptor(PythonLibraryHostFactory))
+			ctx.RegisterModuleType("python_binary_host",
+				android.ModuleFactoryAdaptor(PythonBinaryHostFactory))
 			ctx.MockFileSystem(d.mockFiles)
 			_, testErrs := ctx.ParseBlueprintsFiles(bpFile)
 			fail(t, testErrs)
diff --git a/python/test.go b/python/test.go
index 8318438..837eb25 100644
--- a/python/test.go
+++ b/python/test.go
@@ -17,8 +17,6 @@
 import (
 	"android/soong/android"
 	"path/filepath"
-
-	"github.com/google/blueprint"
 )
 
 // This file contains the module types for building Python test.
@@ -42,13 +40,15 @@
 	p.pythonDecorator.baseInstaller.install(ctx, file)
 }
 
-func PythonTestHostFactory() (blueprint.Module, []interface{}) {
+func PythonTestHostFactory() android.Module {
 	decorator := &pythonTestHostDecorator{
 		pythonDecorator: pythonDecorator{baseInstaller: NewPythonInstaller("nativetest")}}
 
 	module := &PythonBinaryHost{}
 	module.pythonBaseModule.installer = decorator
 
+	module.AddProperties(&module.binaryProperties)
+
 	return InitPythonBaseModule(&module.pythonBinaryBase.pythonBaseModule,
-		&module.pythonBinaryBase, android.HostSupportedNoCross, &module.binaryProperties)
+		&module.pythonBinaryBase, android.HostSupportedNoCross)
 }
