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/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()
 	})
