diff --git a/android/arch.go b/android/arch.go
index a5d416c..afb9c7f 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -757,7 +757,7 @@
 
 	for _, os := range OsTypeList {
 		for _, t := range mctx.Config().Targets[os] {
-			if base.supportsTarget(t) && base.osEnabled(os) {
+			if base.supportsTarget(t) {
 				moduleOSList = append(moduleOSList, os)
 				break
 			}
@@ -1183,16 +1183,6 @@
 		}
 		base.archProperties = append(base.archProperties, archProperties)
 		m.AddProperties(archProperties...)
-
-		// Special case the enabled property so the osMutator can skip creating variants that
-		// are disabled.
-		if properties == &base.enabledProperties {
-			if len(archProperties) != 1 {
-				panic(fmt.Errorf("expected a single arch-specific enabledProperties type, found %d",
-					len(archProperties)))
-			}
-			base.archEnabledProperties = archProperties[0].(*archPropRoot)
-		}
 	}
 
 	base.customizableProperties = m.GetProperties()
diff --git a/android/defaults.go b/android/defaults.go
index be5359f..eb013d7 100644
--- a/android/defaults.go
+++ b/android/defaults.go
@@ -174,22 +174,20 @@
 
 func InitDefaultsModule(module DefaultsModule) {
 	commonProperties := &commonProperties{}
-	enabledProperties := &enabledProperties{}
 
 	module.AddProperties(
 		&hostAndDeviceProperties{},
-		enabledProperties,
 		commonProperties,
 		&ApexProperties{},
 		&distProperties{})
 
-	base := module.base()
 	initAndroidModuleBase(module)
 	initProductVariableModule(module)
 	InitArchModule(module)
 	InitDefaultableModule(module)
 
 	// Add properties that will not have defaults applied to them.
+	base := module.base()
 	defaultsVisibility := &DefaultsVisibilityProperties{}
 	module.AddProperties(&base.nameProperties, defaultsVisibility)
 
diff --git a/android/module.go b/android/module.go
index fa2f108..9bcb22f 100644
--- a/android/module.go
+++ b/android/module.go
@@ -19,7 +19,6 @@
 	"os"
 	"path"
 	"path/filepath"
-	"reflect"
 	"regexp"
 	"strings"
 	"text/scanner"
@@ -513,7 +512,7 @@
 	Name *string
 }
 
-type enabledProperties struct {
+type commonProperties struct {
 	// emit build rules for this module
 	//
 	// Disabling a module should only be done for those modules that cannot be built
@@ -522,9 +521,7 @@
 	// disabled as that will prevent them from being built by the checkbuild target
 	// and so prevent early detection of changes that have broken those modules.
 	Enabled *bool `android:"arch_variant"`
-}
 
-type commonProperties struct {
 	// Controls the visibility of this module to other modules. Allowable values are one or more of
 	// these formats:
 	//
@@ -833,7 +830,6 @@
 
 	m.AddProperties(
 		&base.nameProperties,
-		&base.enabledProperties,
 		&base.commonProperties,
 		&base.distProperties)
 
@@ -932,11 +928,6 @@
 	archProperties          [][]interface{}
 	customizableProperties  []interface{}
 
-	// The enabled property is special-cased so that the osMutator can skip creating variants
-	// that are disabled.
-	enabledProperties     enabledProperties
-	archEnabledProperties *archPropRoot
-
 	// Information about all the properties on the module that contains visibility rules that need
 	// checking.
 	visibilityPropertyInfo []visibilityProperty
@@ -1127,33 +1118,6 @@
 	}
 }
 
-// osEnabled returns true if the given OS is enabled for the current module.
-func (m *ModuleBase) osEnabled(os OsType) bool {
-	targetStruct := reflect.ValueOf(m.archEnabledProperties.Target)
-
-	if targetStruct.Kind() != reflect.Ptr || targetStruct.Type().Elem().Kind() != reflect.Struct {
-		panic(fmt.Errorf("expected a pointer to a struct, found %s", targetStruct.Type()))
-	}
-
-	if targetStruct.IsNil() {
-		return !os.DefaultDisabled
-	}
-
-	osStruct := targetStruct.Elem().FieldByName(os.Field)
-
-	if targetStruct.Kind() != reflect.Ptr || targetStruct.Type().Elem().Kind() != reflect.Struct {
-		panic(fmt.Errorf("expected a pointer to a struct, found %s", targetStruct.Type()))
-	}
-
-	if osStruct.IsNil() {
-		return !os.DefaultDisabled
-	}
-
-	enabledField := osStruct.Elem().FieldByName("Enabled")
-
-	return proptools.BoolDefault(enabledField.Interface().(*bool), !os.DefaultDisabled)
-}
-
 // DeviceSupported returns true if the current module is supported and enabled for device targets,
 // i.e. the factory method set the HostOrDeviceSupported value to include device support and
 // the device support is enabled by default or enabled by the device_supported property.
@@ -1253,7 +1217,10 @@
 	if m.commonProperties.ForcedDisabled {
 		return false
 	}
-	return proptools.BoolDefault(m.enabledProperties.Enabled, !m.Os().DefaultDisabled)
+	if m.commonProperties.Enabled == nil {
+		return !m.Os().DefaultDisabled
+	}
+	return *m.commonProperties.Enabled
 }
 
 func (m *ModuleBase) Disable() {
diff --git a/android/path_properties.go b/android/path_properties.go
index ee84c67..6b1cdb3 100644
--- a/android/path_properties.go
+++ b/android/path_properties.go
@@ -29,7 +29,7 @@
 // property that is tagged with android:"path".
 func pathDepsMutator(ctx BottomUpMutatorContext) {
 	m := ctx.Module().(Module)
-	if m == nil || !m.Enabled() {
+	if m == nil {
 		return
 	}
 
