diff --git a/appcompat/update.py b/appcompat/update.py
index edf4c16..15c97f3 100755
--- a/appcompat/update.py
+++ b/appcompat/update.py
@@ -34,4 +34,5 @@
 ]
 
 if __name__ == '__main__':
-    update.main(THIS_DIR, 'appcompat', appcompat_install_list, appcompat_extracted_list)
+    args = update.parse_args()
+    update.main(args, THIS_DIR, 'appcompat', appcompat_install_list, appcompat_extracted_list)
diff --git a/common/python/update_prebuilts.py b/common/python/update_prebuilts.py
index 2bbdd3e..096ad9f 100644
--- a/common/python/update_prebuilts.py
+++ b/common/python/update_prebuilts.py
@@ -170,7 +170,7 @@
     check_call(['unzip', '-DD', zip_file, '-d', unzip_path])
 
 
-def get_args():
+def parse_args(parser_modifier=None):
     """Parses and returns command line arguments."""
     parser = argparse.ArgumentParser(
         epilog='Either --build or --local-dist is required.')
@@ -189,6 +189,9 @@
         '-v', '--verbose', action='count', default=0,
         help='Increase output verbosity.')
 
+    if parser_modifier:
+        parser_modifier(parser)
+
     args = parser.parse_args()
     if ((not args.build and not args.local_dist) or
         (args.build and args.local_dist)):
@@ -196,10 +199,9 @@
     return args
 
 
-def main(work_dir, prebuilts, install_list, extracted_list, commit_message_note=None):
+def main(args, work_dir, prebuilts, install_list, extracted_list, commit_message_note=None):
     """Program entry point."""
 
-    args = get_args()
     verbose_map = (logging.WARNING, logging.INFO, logging.DEBUG)
     verbosity = args.verbose
     if verbosity > 2:
diff --git a/mainline/update.py b/mainline/update.py
index a912bf4..45a4580 100755
--- a/mainline/update.py
+++ b/mainline/update.py
@@ -27,16 +27,15 @@
 PREBUILT_DESCRIPTION = 'mainline'
 TARGET = 'mainline_modules'
 
-COMMIT_MESSAGE_NOTE = """\
-CL prepared by prebuilts/runtime/mainline/update.py. See
-prebuilts/runtime/mainline/README.md for update instructions.
+COMMIT_MESSAGE_NOTE_TEMPLATE = """\
+CL prepared by prebuilts/runtime/mainline/update.py with the following
+targets: {}
+
+See prebuilts/runtime/mainline/README.md for update instructions.
 
 Test: Presubmits
 """
 
-mainline_install_list = []
-mainline_extracted_list = []
-
 def InstallApexEntries(apex_name, install_dir):
   res = []
   for arch in ['arm', 'arm64', 'x86', 'x86_64']:
@@ -64,48 +63,64 @@
       install_dir,
       install_unzipped=True)]
 
-# CompOS (T+)
-mainline_install_list.extend(
-    InstallSdkEntries('compos-module-sdk', 'compos/sdk'))
+PREBUILT_INSTALL_MODULES = {
+    # CompOS (T+)
+    'compos': InstallSdkEntries('compos-module-sdk', 'compos/sdk'),
 
-# Conscrypt
-mainline_install_list.extend(
-    InstallApexEntries('com.android.conscrypt', 'conscrypt/apex') +
-    InstallSdkEntries('conscrypt-module-test-exports', 'conscrypt/test-exports') +
-    InstallSdkEntries('conscrypt-module-host-exports', 'conscrypt/host-exports'))
+    # Conscrypt
+    'conscrypt': (
+        InstallApexEntries('com.android.conscrypt', 'conscrypt/apex') +
+        InstallSdkEntries('conscrypt-module-test-exports', 'conscrypt/test-exports') +
+        InstallSdkEntries('conscrypt-module-host-exports', 'conscrypt/host-exports')),
 
-# Runtime (Bionic)
-mainline_install_list.extend(
-    InstallApexEntries('com.android.runtime', 'runtime/apex') +
-    InstallSdkEntries('runtime-module-sdk', 'runtime/sdk') +
-    InstallSdkEntries('runtime-module-host-exports', 'runtime/host-exports'))
+    # Runtime (Bionic)
+    'runtime': (
+        InstallApexEntries('com.android.runtime', 'runtime/apex') +
+        InstallSdkEntries('runtime-module-sdk', 'runtime/sdk') +
+        InstallSdkEntries('runtime-module-host-exports', 'runtime/host-exports')),
 
-# I18N
-mainline_install_list.extend(
-    InstallApexEntries('com.android.i18n', 'i18n/apex') +
-    InstallSdkEntries('i18n-module-sdk', 'i18n/sdk') +
-    InstallSdkEntries('i18n-module-test-exports', 'i18n/test-exports'))
+    # I18N
+    'i18n': (
+        InstallApexEntries('com.android.i18n', 'i18n/apex') +
+        InstallSdkEntries('i18n-module-sdk', 'i18n/sdk') +
+        InstallSdkEntries('i18n-module-test-exports', 'i18n/test-exports')),
 
-# tzdata
-mainline_install_list.extend(
-    InstallApexEntries('com.android.tzdata', 'tzdata/apex') +
-    InstallSdkEntries('tzdata-module-test-exports', 'tzdata/test-exports'))
+    # tzdata
+    'tzdata': (
+        InstallApexEntries('com.android.tzdata', 'tzdata/apex') +
+        InstallSdkEntries('tzdata-module-test-exports', 'tzdata/test-exports')),
 
-# statsd
-mainline_install_list.extend(
-    InstallApexEntries('com.android.os.statsd', 'statsd/apex'))
+    # statsd
+    'statsd': InstallApexEntries('com.android.os.statsd', 'statsd/apex'),
 
-# Platform
-mainline_install_list.extend(
-    InstallSdkEntries('platform-mainline-sdk', 'platform/sdk') +
-    InstallSdkEntries('platform-mainline-test-exports', 'platform/test-exports') +
-    # Shared libraries that are stubs in SDKs, but for which we need their
-    # implementation for device testing.
-    InstallSharedLibEntries('heapprofd_client_api', 'platform/impl') +
-    InstallSharedLibEntries('libartpalette-system', 'platform/impl') +
-    InstallSharedLibEntries('liblog', 'platform/impl'))
+    # Platform
+    'platform': (
+        InstallSdkEntries('platform-mainline-sdk', 'platform/sdk') +
+        InstallSdkEntries('platform-mainline-test-exports', 'platform/test-exports') +
+        # Shared libraries that are stubs in SDKs, but for which we need their
+        # implementation for device testing.
+        InstallSharedLibEntries('heapprofd_client_api', 'platform/impl') +
+        InstallSharedLibEntries('libartpalette-system', 'platform/impl') +
+        InstallSharedLibEntries('liblog', 'platform/impl')),
+}
+
+def add_additional_arguments(parser):
+    parser.add_argument('--install-module', choices=['all'] + PREBUILT_INSTALL_MODULES.keys(),
+                        default='all',
+                        help="The prebuilt module(s) to install.")
 
 if __name__ == '__main__':
-    update.main(THIS_DIR, PREBUILT_DESCRIPTION,
-                mainline_install_list, mainline_extracted_list,
-                COMMIT_MESSAGE_NOTE)
+    args = update.parse_args(add_additional_arguments)
+
+    mainline_install_list = []
+    if args.install_module == 'all':
+      modules = PREBUILT_INSTALL_MODULES.keys()
+    else:
+      modules = [args.install_module]
+    for module in modules:
+      mainline_install_list.extend(PREBUILT_INSTALL_MODULES[module])
+
+    commit_message_note = COMMIT_MESSAGE_NOTE_TEMPLATE.format(', '.join(modules))
+
+    update.main(args, THIS_DIR, PREBUILT_DESCRIPTION, mainline_install_list, [],
+                commit_message_note)
diff --git a/update.py b/update.py
index ddb104c..8023455 100755
--- a/update.py
+++ b/update.py
@@ -32,4 +32,5 @@
 ]
 
 if __name__ == '__main__':
-    update.main(THIS_DIR, 'adb', adb_install_list, adb_extracted_list)
+    args = update.parse_args()
+    update.main(args, THIS_DIR, 'adb', adb_install_list, adb_extracted_list)
