diff --git a/android/arch.go b/android/arch.go
index 606de48..61564d8 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -260,7 +260,7 @@
 	return target.Os.String() + "_" + target.Arch.String()
 }
 
-func ArchMutator(mctx BottomUpMutatorContext) {
+func archMutator(mctx BottomUpMutatorContext) {
 	var module Module
 	var ok bool
 	if module, ok = mctx.Module().(Module); !ok {
diff --git a/android/module.go b/android/module.go
index d6eee44..06f1fca 100644
--- a/android/module.go
+++ b/android/module.go
@@ -24,15 +24,6 @@
 	"github.com/google/blueprint"
 )
 
-func init() {
-	RegisterTopDownMutator("load_hooks", loadHookMutator).Parallel()
-	RegisterBottomUpMutator("defaults_deps", defaultsDepsMutator).Parallel()
-	RegisterTopDownMutator("defaults", defaultsMutator).Parallel()
-
-	RegisterBottomUpMutator("arch", ArchMutator).Parallel()
-	RegisterTopDownMutator("arch_hooks", archHookMutator).Parallel()
-}
-
 var (
 	DeviceSharedLibrary = "shared_library"
 	DeviceStaticLibrary = "static_library"
@@ -100,6 +91,7 @@
 	blueprint.Module
 
 	GenerateAndroidBuildActions(ModuleContext)
+	DepsMutator(BottomUpMutatorContext)
 
 	base() *ModuleBase
 	Enabled() bool
diff --git a/android/mutator.go b/android/mutator.go
index ff2f9ad..b375bce 100644
--- a/android/mutator.go
+++ b/android/mutator.go
@@ -16,6 +16,61 @@
 
 import "github.com/google/blueprint"
 
+// Mutator phases:
+//   Pre-arch
+//   Arch
+//   Pre-deps
+//   Deps
+//   PostDeps
+
+func registerMutators() {
+	ctx := registerMutatorsContext{}
+
+	register := func(funcs []RegisterMutatorFunc) {
+		for _, f := range funcs {
+			f(ctx)
+		}
+	}
+
+	ctx.TopDown("load_hooks", loadHookMutator).Parallel()
+	ctx.BottomUp("defaults_deps", defaultsDepsMutator).Parallel()
+	ctx.TopDown("defaults", defaultsMutator).Parallel()
+
+	register(preArch)
+
+	ctx.BottomUp("arch", archMutator).Parallel()
+	ctx.TopDown("arch_hooks", archHookMutator).Parallel()
+
+	register(preDeps)
+
+	ctx.BottomUp("deps", depsMutator).Parallel()
+
+	register(postDeps)
+}
+
+type registerMutatorsContext struct{}
+
+type RegisterMutatorsContext interface {
+	TopDown(name string, m AndroidTopDownMutator) MutatorHandle
+	BottomUp(name string, m AndroidBottomUpMutator) MutatorHandle
+}
+
+type RegisterMutatorFunc func(RegisterMutatorsContext)
+
+var preArch, preDeps, postDeps []RegisterMutatorFunc
+
+func PreArchMutators(f RegisterMutatorFunc) {
+	preArch = append(preArch, f)
+}
+
+func PreDepsMutators(f RegisterMutatorFunc) {
+	preDeps = append(preDeps, f)
+}
+
+func PostDepsMutators(f RegisterMutatorFunc) {
+	postDeps = append(postDeps, f)
+}
+
 type AndroidTopDownMutator func(TopDownMutatorContext)
 
 type TopDownMutatorContext interface {
@@ -40,7 +95,7 @@
 	androidBaseContextImpl
 }
 
-func RegisterBottomUpMutator(name string, m AndroidBottomUpMutator) MutatorHandle {
+func (registerMutatorsContext) BottomUp(name string, m AndroidBottomUpMutator) MutatorHandle {
 	f := func(ctx blueprint.BottomUpMutatorContext) {
 		if a, ok := ctx.Module().(Module); ok {
 			actx := &androidBottomUpMutatorContext{
@@ -55,7 +110,7 @@
 	return mutator
 }
 
-func RegisterTopDownMutator(name string, m AndroidTopDownMutator) MutatorHandle {
+func (registerMutatorsContext) TopDown(name string, m AndroidTopDownMutator) MutatorHandle {
 	f := func(ctx blueprint.TopDownMutatorContext) {
 		if a, ok := ctx.Module().(Module); ok {
 			actx := &androidTopDownMutatorContext{
@@ -78,3 +133,9 @@
 	mutator.parallel = true
 	return mutator
 }
+
+func depsMutator(ctx BottomUpMutatorContext) {
+	if m, ok := ctx.Module().(Module); ok {
+		m.DepsMutator(ctx)
+	}
+}
diff --git a/android/register.go b/android/register.go
index 7cc9d50..f869eed 100644
--- a/android/register.go
+++ b/android/register.go
@@ -58,6 +58,8 @@
 		ctx.RegisterSingletonType(t.name, t.factory)
 	}
 
+	registerMutators()
+
 	for _, t := range mutators {
 		var handle blueprint.MutatorHandle
 		if t.bottomUpMutator != nil {
diff --git a/android/variable.go b/android/variable.go
index 29d6c7d..ac7c730 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -24,7 +24,9 @@
 )
 
 func init() {
-	RegisterBottomUpMutator("variable", variableMutator).Parallel()
+	PreDepsMutators(func(ctx RegisterMutatorsContext) {
+		ctx.BottomUp("variable", variableMutator).Parallel()
+	})
 }
 
 type variableProperties struct {
