diff --git a/android/arch.go b/android/arch.go
index 2d38daf..62acb09 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -24,13 +24,6 @@
 	"github.com/google/blueprint/proptools"
 )
 
-func init() {
-	RegisterBottomUpMutator("defaults_deps", defaultsDepsMutator).Parallel()
-	RegisterTopDownMutator("defaults", defaultsMutator).Parallel()
-
-	RegisterBottomUpMutator("arch", ArchMutator).Parallel()
-}
-
 var (
 	Arm    = newArch("arm", "lib32")
 	Arm64  = newArch("arm64", "lib64")
@@ -490,6 +483,8 @@
 		allProperties = append(allProperties, asp)
 	}
 
+	base.customizableProperties = allProperties
+
 	return m, allProperties
 }
 
diff --git a/android/customizer.go b/android/customizer.go
new file mode 100644
index 0000000..056880d
--- /dev/null
+++ b/android/customizer.go
@@ -0,0 +1,77 @@
+// Copyright 2016 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package android
+
+import "github.com/google/blueprint/proptools"
+
+type CustomizePropertiesContext interface {
+	BaseContext
+	AppendProperties(...interface{})
+	PrependProperties(...interface{})
+}
+
+type customizePropertiesContext struct {
+	BaseContext
+
+	module *ModuleBase
+}
+
+type PropertyCustomizer interface {
+	CustomizeProperties(CustomizePropertiesContext)
+}
+
+func customizerMutator(ctx TopDownMutatorContext) {
+	if m, ok := ctx.Module().(Module); ok {
+		a := m.base()
+		if len(a.customizers) > 0 {
+			mctx := &customizePropertiesContext{
+				BaseContext: ctx,
+				module:      a,
+			}
+			for _, c := range a.customizers {
+				c.CustomizeProperties(mctx)
+				if mctx.Failed() {
+					return
+				}
+			}
+		}
+	}
+}
+
+func (ctx *customizePropertiesContext) AppendProperties(props ...interface{}) {
+	for _, p := range props {
+		err := proptools.AppendMatchingProperties(ctx.module.customizableProperties, p, nil)
+		if err != nil {
+			if propertyErr, ok := err.(*proptools.ExtendPropertyError); ok {
+				ctx.PropertyErrorf(propertyErr.Property, "%s", propertyErr.Err.Error())
+			} else {
+				panic(err)
+			}
+		}
+	}
+}
+
+func (ctx *customizePropertiesContext) PrependProperties(props ...interface{}) {
+	for _, p := range props {
+		err := proptools.PrependMatchingProperties(ctx.module.customizableProperties, p, nil)
+		if err != nil {
+			if propertyErr, ok := err.(*proptools.ExtendPropertyError); ok {
+				ctx.PropertyErrorf(propertyErr.Property, "%s", propertyErr.Err.Error())
+			} else {
+				panic(err)
+			}
+		}
+	}
+}
diff --git a/android/module.go b/android/module.go
index 03c06b4..fd37ca8 100644
--- a/android/module.go
+++ b/android/module.go
@@ -25,6 +25,14 @@
 	"github.com/google/blueprint"
 )
 
+func init() {
+	RegisterTopDownMutator("customizer", customizerMutator).Parallel()
+	RegisterBottomUpMutator("defaults_deps", defaultsDepsMutator).Parallel()
+	RegisterTopDownMutator("defaults", defaultsMutator).Parallel()
+
+	RegisterBottomUpMutator("arch", ArchMutator).Parallel()
+}
+
 var (
 	DeviceSharedLibrary = "shared_library"
 	DeviceStaticLibrary = "static_library"
@@ -188,6 +196,11 @@
 	return InitArchModule(m, propertyStructs...)
 }
 
+func AddCustomizer(m blueprint.Module, c PropertyCustomizer) {
+	base := m.(Module).base()
+	base.customizers = append(base.customizers, c)
+}
+
 // A AndroidModuleBase object contains the properties that are common to all Android
 // modules.  It should be included as an anonymous field in every module
 // struct definition.  InitAndroidModule should then be called from the module's
@@ -238,6 +251,7 @@
 	hostAndDeviceProperties hostAndDeviceProperties
 	generalProperties       []interface{}
 	archProperties          []*archProperties
+	customizableProperties  []interface{}
 
 	noAddressSanitizer bool
 	installFiles       Paths
@@ -248,6 +262,8 @@
 	installTarget    string
 	checkbuildTarget string
 	blueprintDir     string
+
+	customizers []PropertyCustomizer
 }
 
 func (a *ModuleBase) base() *ModuleBase {
