diff --git a/Android.bp b/Android.bp
index e9597f4..10e6a2e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -55,6 +55,7 @@
         "android/namespace.go",
         "android/neverallow.go",
         "android/onceper.go",
+        "android/override_module.go",
         "android/package_ctx.go",
         "android/paths.go",
         "android/prebuilt.go",
diff --git a/android/config.go b/android/config.go
index 24be10a..33986f7 100644
--- a/android/config.go
+++ b/android/config.go
@@ -895,16 +895,30 @@
 }
 
 func (c *deviceConfig) OverrideManifestPackageNameFor(name string) (manifestName string, overridden bool) {
+	if newManifestName, overridden := c.manifestPackageNameOverrides().Load(name); overridden {
+		return newManifestName.(string), true
+	}
 	return findOverrideValue(c.config.productVariables.ManifestPackageNameOverrides, name,
 		"invalid override rule %q in PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES should be <module_name>:<manifest_name>")
 }
 
 func (c *deviceConfig) OverrideCertificateFor(name string) (certificatePath string, overridden bool) {
-	return findOverrideValue(c.config.productVariables.CertificateOverrides, name,
+	if newCert, overridden := c.certificateOverrides().Load(name); overridden {
+		return newCert.(string), true
+	}
+	newCert, overridden := findOverrideValue(c.config.productVariables.CertificateOverrides, name,
 		"invalid override rule %q in PRODUCT_CERTIFICATE_OVERRIDES should be <module_name>:<certificate_module_name>")
+	if overridden {
+		// PRODUCT_CERTIFICATE_OVERRIDES only supports cert modules.
+		newCert = ":" + newCert
+	}
+	return newCert, overridden
 }
 
 func (c *deviceConfig) OverridePackageNameFor(name string) string {
+	if newName, overridden := c.moduleNameOverrides().Load(name); overridden {
+		return newName.(string)
+	}
 	newName, overridden := findOverrideValue(
 		c.config.productVariables.PackageNameOverrides,
 		name,
diff --git a/android/override_module.go b/android/override_module.go
new file mode 100644
index 0000000..9fe5f21
--- /dev/null
+++ b/android/override_module.go
@@ -0,0 +1,97 @@
+package android
+
+import (
+	"github.com/google/blueprint/proptools"
+	"sync"
+)
+
+func init() {
+	RegisterModuleType("override_module", OverrideModuleFactory)
+}
+
+type OverrideModule struct {
+	ModuleBase
+	properties OverrideModuleProperties
+}
+
+type OverrideModuleProperties struct {
+	// base module to override
+	Base *string
+
+	// file path or module name (in the form ":module") of a certificate to override with
+	Certificate *string
+
+	// manifest package name to override with
+	Manifest_package_name *string
+}
+
+// TODO(jungjw): Work with the mainline team to see if we can deprecate all PRODUCT_*_OVERRIDES vars
+// and hand over overriding values directly to base module code.
+func processOverrides(ctx LoadHookContext, p *OverrideModuleProperties) {
+	base := proptools.String(p.Base)
+	if base == "" {
+		ctx.PropertyErrorf("base", "base module name must be provided")
+	}
+
+	config := ctx.DeviceConfig()
+	if other, loaded := config.moduleNameOverrides().LoadOrStore(base, ctx.ModuleName()); loaded {
+		ctx.ModuleErrorf("multiple overriding modules for %q, the other: %q", base, other.(string))
+	}
+
+	if p.Certificate != nil {
+		config.certificateOverrides().Store(base, *p.Certificate)
+	}
+
+	if p.Manifest_package_name != nil {
+		config.manifestPackageNameOverrides().Store(base, *p.Manifest_package_name)
+	}
+}
+
+func (i *OverrideModule) DepsMutator(ctx BottomUpMutatorContext) {
+	base := *i.properties.Base
+	// Right now, we add a dependency only to check the base module exists, and so are not using a tag here.
+	// TODO(jungjw): Add a tag and check the base module type once we finalize supported base module types.
+	ctx.AddDependency(ctx.Module(), nil, base)
+}
+
+func (i *OverrideModule) GenerateAndroidBuildActions(ctx ModuleContext) {
+	// All the overrides happen in the base module.
+	// TODO(jungjw): Check the base module type.
+}
+
+// override_module overrides an existing module with the specified properties.
+//
+// Currently, only android_app is officially supported.
+func OverrideModuleFactory() Module {
+	m := &OverrideModule{}
+	AddLoadHook(m, func(ctx LoadHookContext) {
+		processOverrides(ctx, &m.properties)
+	})
+	m.AddProperties(&m.properties)
+	InitAndroidModule(m)
+	return m
+}
+
+var moduleNameOverridesKey = NewOnceKey("moduleNameOverrides")
+
+func (c *deviceConfig) moduleNameOverrides() *sync.Map {
+	return c.Once(moduleNameOverridesKey, func() interface{} {
+		return &sync.Map{}
+	}).(*sync.Map)
+}
+
+var certificateOverridesKey = NewOnceKey("certificateOverrides")
+
+func (c *deviceConfig) certificateOverrides() *sync.Map {
+	return c.Once(certificateOverridesKey, func() interface{} {
+		return &sync.Map{}
+	}).(*sync.Map)
+}
+
+var manifestPackageNameOverridesKey = NewOnceKey("manifestPackageNameOverrides")
+
+func (c *deviceConfig) manifestPackageNameOverrides() *sync.Map {
+	return c.Once(manifestPackageNameOverridesKey, func() interface{} {
+		return &sync.Map{}
+	}).(*sync.Map)
+}
diff --git a/android/paths.go b/android/paths.go
index 3366db1..afde55e 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -712,7 +712,7 @@
 		reportPathErrorf(ctx, "extension %q cannot contain /", ext)
 	}
 	ret := PathForOutput(ctx, pathtools.ReplaceExtension(p.path, ext))
-	ret.rel = p.rel
+	ret.rel = pathtools.ReplaceExtension(p.rel, ext)
 	return ret
 }
 
@@ -724,7 +724,7 @@
 	}
 
 	ret := PathForOutput(ctx, filepath.Dir(p.path), path)
-	ret.rel = p.rel
+	ret.rel = filepath.Join(filepath.Dir(p.rel), path)
 	return ret
 }
 
diff --git a/android/paths_test.go b/android/paths_test.go
index 3b6d2ec..20a00a0 100644
--- a/android/paths_test.go
+++ b/android/paths_test.go
@@ -696,22 +696,26 @@
 	ctx := &configErrorWrapper{
 		config: TestConfig("out", nil),
 	}
-	p := PathForOutput(ctx, "system/framework/boot.art")
+	p := PathForOutput(ctx, "system/framework").Join(ctx, "boot.art")
 	p2 := p.ReplaceExtension(ctx, "oat")
 	fmt.Println(p, p2)
+	fmt.Println(p.Rel(), p2.Rel())
 
 	// Output:
 	// out/system/framework/boot.art out/system/framework/boot.oat
+	// boot.art boot.oat
 }
 
 func ExampleOutputPath_FileInSameDir() {
 	ctx := &configErrorWrapper{
 		config: TestConfig("out", nil),
 	}
-	p := PathForOutput(ctx, "system/framework/boot.art")
+	p := PathForOutput(ctx, "system/framework").Join(ctx, "boot.art")
 	p2 := p.InSameDir(ctx, "oat", "arm", "boot.vdex")
 	fmt.Println(p, p2)
+	fmt.Println(p.Rel(), p2.Rel())
 
 	// Output:
 	// out/system/framework/boot.art out/system/framework/oat/arm/boot.vdex
+	// boot.art oat/arm/boot.vdex
 }
diff --git a/android/prebuilt_etc.go b/android/prebuilt_etc.go
index a047e47..c58cc4f 100644
--- a/android/prebuilt_etc.go
+++ b/android/prebuilt_etc.go
@@ -26,6 +26,7 @@
 	RegisterModuleType("prebuilt_etc", PrebuiltEtcFactory)
 	RegisterModuleType("prebuilt_etc_host", PrebuiltEtcHostFactory)
 	RegisterModuleType("prebuilt_usr_share", PrebuiltUserShareFactory)
+	RegisterModuleType("prebuilt_usr_share_host", PrebuiltUserShareHostFactory)
 
 	PreDepsMutators(func(ctx RegisterMutatorsContext) {
 		ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel()
@@ -202,6 +203,15 @@
 	return module
 }
 
+// prebuild_usr_share_host is for host prebuilts that will be installed to <partition>/usr/share/<subdir>
+func PrebuiltUserShareHostFactory() Module {
+	module := &PrebuiltEtc{installDirBase: "usr/share"}
+	InitPrebuiltEtcModule(module)
+	// This module is host-only
+	InitAndroidArchModule(module, HostSupported, MultilibCommon)
+	return module
+}
+
 const (
 	// coreMode is the variant for modules to be installed to system.
 	coreMode = "core"
diff --git a/android/prebuilt_etc_test.go b/android/prebuilt_etc_test.go
index 206f53b..e0ade7e 100644
--- a/android/prebuilt_etc_test.go
+++ b/android/prebuilt_etc_test.go
@@ -19,17 +19,19 @@
 	"bytes"
 	"io/ioutil"
 	"os"
+	"path/filepath"
 	"strings"
 	"testing"
 )
 
-func testPrebuiltEtc(t *testing.T, bp string) *TestContext {
+func testPrebuiltEtc(t *testing.T, bp string) (*TestContext, Config) {
 	config, buildDir := setUp(t)
 	defer tearDown(buildDir)
 	ctx := NewTestArchContext()
 	ctx.RegisterModuleType("prebuilt_etc", ModuleFactoryAdaptor(PrebuiltEtcFactory))
 	ctx.RegisterModuleType("prebuilt_etc_host", ModuleFactoryAdaptor(PrebuiltEtcHostFactory))
 	ctx.RegisterModuleType("prebuilt_usr_share", ModuleFactoryAdaptor(PrebuiltUserShareFactory))
+	ctx.RegisterModuleType("prebuilt_usr_share_host", ModuleFactoryAdaptor(PrebuiltUserShareHostFactory))
 	ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
 		ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel()
 	})
@@ -46,7 +48,7 @@
 	_, errs = ctx.PrepareBuildActions(config)
 	FailIfErrored(t, errs)
 
-	return ctx
+	return ctx, config
 }
 
 func setUp(t *testing.T) (config Config, buildDir string) {
@@ -64,7 +66,7 @@
 }
 
 func TestPrebuiltEtcVariants(t *testing.T) {
-	ctx := testPrebuiltEtc(t, `
+	ctx, _ := testPrebuiltEtc(t, `
 		prebuilt_etc {
 			name: "foo.conf",
 			src: "foo.conf",
@@ -98,7 +100,7 @@
 }
 
 func TestPrebuiltEtcOutputPath(t *testing.T) {
-	ctx := testPrebuiltEtc(t, `
+	ctx, _ := testPrebuiltEtc(t, `
 		prebuilt_etc {
 			name: "foo.conf",
 			src: "foo.conf",
@@ -113,7 +115,7 @@
 }
 
 func TestPrebuiltEtcGlob(t *testing.T) {
-	ctx := testPrebuiltEtc(t, `
+	ctx, _ := testPrebuiltEtc(t, `
 		prebuilt_etc {
 			name: "my_foo",
 			src: "foo.*",
@@ -137,7 +139,7 @@
 }
 
 func TestPrebuiltEtcAndroidMk(t *testing.T) {
-	ctx := testPrebuiltEtc(t, `
+	ctx, _ := testPrebuiltEtc(t, `
 		prebuilt_etc {
 			name: "foo",
 			src: "foo.conf",
@@ -181,7 +183,7 @@
 }
 
 func TestPrebuiltEtcHost(t *testing.T) {
-	ctx := testPrebuiltEtc(t, `
+	ctx, _ := testPrebuiltEtc(t, `
 		prebuilt_etc_host {
 			name: "foo.conf",
 			src: "foo.conf",
@@ -196,7 +198,7 @@
 }
 
 func TestPrebuiltUserShareInstallDirPath(t *testing.T) {
-	ctx := testPrebuiltEtc(t, `
+	ctx, _ := testPrebuiltEtc(t, `
 		prebuilt_usr_share {
 			name: "foo.conf",
 			src: "foo.conf",
@@ -210,3 +212,20 @@
 		t.Errorf("expected %q, got %q", expected, p.installDirPath.RelPathString())
 	}
 }
+
+func TestPrebuiltUserShareHostInstallDirPath(t *testing.T) {
+	ctx, config := testPrebuiltEtc(t, `
+		prebuilt_usr_share_host {
+			name: "foo.conf",
+			src: "foo.conf",
+			sub_dir: "bar",
+		}
+	`)
+
+	buildOS := BuildOs.String()
+	p := ctx.ModuleForTests("foo.conf", buildOS+"_common").Module().(*PrebuiltEtc)
+	expected := filepath.Join("host", config.PrebuiltOS(), "usr", "share", "bar")
+	if p.installDirPath.RelPathString() != expected {
+		t.Errorf("expected %q, got %q", expected, p.installDirPath.RelPathString())
+	}
+}
diff --git a/android/rule_builder.go b/android/rule_builder.go
index 5edd7b6..ff43e22 100644
--- a/android/rule_builder.go
+++ b/android/rule_builder.go
@@ -299,7 +299,7 @@
 	return c
 }
 
-// FlagWithArg adds the specified flag and list of arguments to the command line, with the arguments joined by sep
+// FlagWithList adds the specified flag and list of arguments to the command line, with the arguments joined by sep
 // and no separator between the flag and arguments.  The flag and arguments should not contain input or output paths or
 // the rule will not have them listed in its dependencies or outputs.
 func (c *RuleBuilderCommand) FlagWithList(flag string, list []string, sep string) *RuleBuilderCommand {
diff --git a/apex/apex.go b/apex/apex.go
index 9ab5187..5d0c52a 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -534,7 +534,7 @@
 func (a *apexBundle) getCertString(ctx android.BaseContext) string {
 	certificate, overridden := ctx.DeviceConfig().OverrideCertificateFor(ctx.ModuleName())
 	if overridden {
-		return ":" + certificate
+		return certificate
 	}
 	return String(a.properties.Certificate)
 }
diff --git a/cmd/soong_build/writedocs.go b/cmd/soong_build/writedocs.go
index e86ef82..4b2dc14 100644
--- a/cmd/soong_build/writedocs.go
+++ b/cmd/soong_build/writedocs.go
@@ -241,7 +241,7 @@
 {{- /* Fixed sidebar with module types */ -}}
 <ul>
 <li><h3>{{.Name}} package</h3></li>
-{{range $moduleType := .Modules}}<li><a href="#{{$moduleType.Name}}">{{$moduleType.Name}}</a></li>
+{{range $moduleType := .Modules}}<li><a href="{{$.Name}}.html#{{$moduleType.Name}}">{{$moduleType.Name}}</a></li>
 {{end -}}
 </ul>
 {{/* Main panel with H1 section per module type */}}
@@ -255,7 +255,7 @@
 	<div class="breadcrumb">
     {{range $i,$prop := $moduleType.Properties }}
 				{{ if gt $i 0 }},&nbsp;{{end -}}
-				<a href=#{{getModule}}.{{$prop.Name}}>{{$prop.Name}}</a>
+				<a href={{$.Name}}.html#{{getModule}}.{{$prop.Name}}>{{$prop.Name}}</a>
 		{{- end -}}
   </div>
 	{{- /* Property description */ -}}
diff --git a/dexpreopt/dexpreopt_test.go b/dexpreopt/dexpreopt_test.go
index 2a58ab9..6dfa9d2 100644
--- a/dexpreopt/dexpreopt_test.go
+++ b/dexpreopt/dexpreopt_test.go
@@ -64,7 +64,7 @@
 		{android.PathForOutput(ctx, "test/oat/arm/package.vdex"), "/system/app/test/oat/arm/test.vdex"},
 	}
 
-	if !reflect.DeepEqual(rule.Installs(), wantInstalls) {
+	if rule.Installs().String() != wantInstalls.String() {
 		t.Errorf("\nwant installs:\n   %v\ngot:\n   %v", wantInstalls, rule.Installs())
 	}
 }
@@ -100,7 +100,7 @@
 		{android.PathForOutput(ctx, "test/oat/arm/package.vdex"), "/system_other/app/test/oat/arm/test.vdex"},
 	}
 
-	if !reflect.DeepEqual(rule.Installs(), wantInstalls) {
+	if rule.Installs().String() != wantInstalls.String() {
 		t.Errorf("\nwant installs:\n   %v\ngot:\n   %v", wantInstalls, rule.Installs())
 	}
 }
@@ -123,7 +123,7 @@
 		{android.PathForOutput(ctx, "test/oat/arm/package.vdex"), "/system/app/test/oat/arm/test.vdex"},
 	}
 
-	if !reflect.DeepEqual(rule.Installs(), wantInstalls) {
+	if rule.Installs().String() != wantInstalls.String() {
 		t.Errorf("\nwant installs:\n   %v\ngot:\n   %v", wantInstalls, rule.Installs())
 	}
 }
diff --git a/java/app.go b/java/app.go
index c08aefd..08b2d91 100644
--- a/java/app.go
+++ b/java/app.go
@@ -392,7 +392,7 @@
 func (a *AndroidApp) getCertString(ctx android.BaseContext) string {
 	certificate, overridden := ctx.DeviceConfig().OverrideCertificateFor(ctx.ModuleName())
 	if overridden {
-		return ":" + certificate
+		return certificate
 	}
 	return String(a.appProperties.Certificate)
 }
diff --git a/java/app_test.go b/java/app_test.go
index 317c752..313844f 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -747,3 +747,57 @@
 		})
 	}
 }
+
+func TestOverrideModule(t *testing.T) {
+	ctx := testJava(t, `
+		android_app {
+			name: "foo",
+			srcs: ["a.java"],
+		}
+
+		override_module {
+			name: "bar",
+			base: "foo",
+			certificate: ":new_certificate",
+			manifest_package_name: "org.dandroid.bp",
+		}
+
+		android_app_certificate {
+			name: "new_certificate",
+	    certificate: "cert/new_cert",
+		}
+		`)
+
+	// The base module still contains all the final outputs after overrides.
+	foo := ctx.ModuleForTests("foo", "android_common")
+
+	// Check the final apk name
+	outputs := foo.AllOutputs()
+	e := buildDir + "/target/product/test_device/system/app/bar/bar.apk"
+	found := false
+	for _, o := range outputs {
+		if o == e {
+			found = true
+			break
+		}
+	}
+	if !found {
+		t.Errorf("Can't find %q in output files.\nAll outputs:%v", e, outputs)
+	}
+
+	// Check the certificate paths
+	signapk := foo.Output("foo.apk")
+	signFlags := signapk.Args["certificates"]
+	e = "cert/new_cert.x509.pem cert/new_cert.pk8"
+	if e != signFlags {
+		t.Errorf("Incorrect signing flags, expected: %q, got: %q", e, signFlags)
+	}
+
+	// Check the manifest package name
+	res := foo.Output("package-res.apk")
+	aapt2Flags := res.Args["flags"]
+	e = "--rename-manifest-package org.dandroid.bp"
+	if !strings.Contains(aapt2Flags, e) {
+		t.Errorf("package renaming flag, %q is missing in aapt2 link flags, %q", e, aapt2Flags)
+	}
+}
diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go
index 280b601..409b4b1 100644
--- a/java/dexpreopt_config.go
+++ b/java/dexpreopt_config.go
@@ -114,7 +114,7 @@
 
 		for _, target := range ctx.Config().Targets[android.Android] {
 			images[target.Arch.ArchType] = dir.Join(ctx,
-				"system/framework", target.Arch.ArchType.String(), "boot.art")
+				"system/framework", target.Arch.ArchType.String()).Join(ctx, "boot.art")
 		}
 
 		return bootImageConfig{
diff --git a/java/java_test.go b/java/java_test.go
index 8d3efcb..bbcc9ed 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -81,11 +81,13 @@
 	ctx.RegisterModuleType("droiddoc_host", android.ModuleFactoryAdaptor(DroiddocHostFactory))
 	ctx.RegisterModuleType("droiddoc_template", android.ModuleFactoryAdaptor(ExportedDroiddocDirFactory))
 	ctx.RegisterModuleType("java_sdk_library", android.ModuleFactoryAdaptor(SdkLibraryFactory))
+	ctx.RegisterModuleType("override_module", android.ModuleFactoryAdaptor(android.OverrideModuleFactory))
 	ctx.RegisterModuleType("prebuilt_apis", android.ModuleFactoryAdaptor(PrebuiltApisFactory))
 	ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
 	ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
 	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
 	ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
+		ctx.TopDown("load_hooks", android.LoadHookMutator).Parallel()
 		ctx.TopDown("prebuilt_apis", PrebuiltApisMutator).Parallel()
 		ctx.TopDown("java_sdk_library", SdkLibraryMutator).Parallel()
 	})
