diff --git a/clang-format.py b/clang-format.py
index 1b1d365..4106d4e 100755
--- a/clang-format.py
+++ b/clang-format.py
@@ -62,7 +62,7 @@
     cmd = [os.path.join(constants.DEPOT_TOOLS_DIR,
                         'download_from_google_storage.py'), '-b',
            'chromium-clang-format', '-s', hash_file_path]
-    cros_build_lib.RunCommand(cmd=cmd, print_cmd=False)
+    cros_build_lib.run(cmd, print_cmd=False)
   return clang_format_path
 
 
@@ -112,17 +112,14 @@
 
   # Fail gracefully if clang-format itself aborts/fails.
   try:
-    result = cros_build_lib.RunCommand(cmd=cmd,
-                                       print_cmd=False,
-                                       redirect_stdout=True,
-                                       encoding='utf-8',
-                                       errors='replace')
+    result = cros_build_lib.run(cmd, print_cmd=False, stdout=True,
+                                encoding='utf-8', errors='replace')
   except cros_build_lib.RunCommandError as e:
     print('clang-format failed:\n' + str(e), file=sys.stderr)
     print('\nPlease report this to the clang team.', file=sys.stderr)
     return 1
 
-  stdout = result.output
+  stdout = result.stdout
   if stdout.rstrip('\n') == 'no modified files to format':
     # This is always printed when only files that clang-format does not
     # understand were modified.
@@ -135,9 +132,7 @@
 
   if diff_filenames:
     if opts.fix:
-      cros_build_lib.RunCommand(cmd=['git', 'apply'],
-                                print_cmd=False,
-                                input=stdout)
+      cros_build_lib.run(['git', 'apply'], print_cmd=False, input=stdout)
     else:
       print('The following files have formatting errors:')
       for filename in diff_filenames:
diff --git a/pre-upload.py b/pre-upload.py
index 34dfcaf..82825db 100755
--- a/pre-upload.py
+++ b/pre-upload.py
@@ -138,19 +138,21 @@
 def _run_command(cmd, **kwargs):
   """Executes the passed in command and returns raw stdout output.
 
-  This is a convenience func to set some RunCommand defaults differently.
+  This is a convenience func to set some run defaults differently.
 
   Args:
     cmd: The command to run; should be a list of strings.
-    **kwargs: Same as cros_build_lib.RunCommand.
+    **kwargs: Same as cros_build_lib.run.
 
   Returns:
     The stdout from the process (discards stderr and returncode).
   """
   kwargs.setdefault('print_cmd', False)
-  kwargs.setdefault('redirect_stdout', True)
-  kwargs.setdefault('error_code_ok', True)
+  kwargs.setdefault('stdout', True)
+  kwargs.setdefault('check', False)
   result = cros_build_lib.RunCommand(cmd, **kwargs)
+  # NB: We decode this directly rather than through kwargs as our tests rely
+  # on this post-processing behavior currently.
   return result.output.decode('utf-8', 'replace')
 
 
@@ -1422,16 +1424,16 @@
   else:
     options.extend(['--commit', commit])
   cmd = [os.path.join(hooks_dir, 'clang-format.py')] + options
-  cmd_result = cros_build_lib.RunCommand(cmd=cmd,
-                                         print_cmd=False,
-                                         redirect_stdout=True,
-                                         encoding='utf-8',
-                                         errors='replace',
-                                         combine_stdout_stderr=True,
-                                         error_code_ok=True)
+  cmd_result = cros_build_lib.run(cmd,
+                                  print_cmd=False,
+                                  stdout=True,
+                                  encoding='utf-8',
+                                  errors='replace',
+                                  combine_stdout_stderr=True,
+                                  check=False)
   if cmd_result.returncode:
     return HookFailure('clang-format.py errors/warnings\n\n' +
-                       cmd_result.output)
+                       cmd_result.stdout)
   return None
 
 
@@ -1452,12 +1454,12 @@
   # we always do, so disable the check globally.
   options.append('--ignore=GERRIT_CHANGE_ID')
   cmd = [os.path.join(hooks_dir, 'checkpatch.pl')] + options + ['-']
-  cmd_result = cros_build_lib.RunCommand(
-      cmd=cmd, print_cmd=False, input=_get_patch(commit).encode('utf-8'),
-      redirect_stdout=True, combine_stdout_stderr=True, error_code_ok=True,
-      encoding='utf-8', errors='replace')
+  cmd_result = cros_build_lib.run(
+      cmd, print_cmd=False, input=_get_patch(commit).encode('utf-8'),
+      stdout=True, combine_stdout_stderr=True, check=False, encoding='utf-8',
+      errors='replace')
   if cmd_result.returncode:
-    return HookFailure('checkpatch.pl errors/warnings\n\n' + cmd_result.output)
+    return HookFailure('checkpatch.pl errors/warnings\n\n' + cmd_result.stdout)
   return None
 
 
@@ -1469,7 +1471,7 @@
   if files:
     hooks_dir = _get_hooks_dir()
     cmd = [os.path.join(hooks_dir, 'kernel-doc'), '-none'] + files
-    output = _run_command(cmd=cmd, combine_stdout_stderr=True)
+    output = _run_command(cmd, combine_stdout_stderr=True)
     if output:
       return HookFailure('kernel-doc errors/warnings:',
                          items=output.splitlines())
@@ -1618,18 +1620,18 @@
   files = _get_affected_files(commit)
   env['PRESUBMIT_FILES'] = '\n'.join(files)
 
-  cmd_result = cros_build_lib.RunCommand(cmd=script,
-                                         env=env,
-                                         shell=True,
-                                         print_cmd=False,
-                                         input=os.devnull,
-                                         redirect_stdout=True,
-                                         combine_stdout_stderr=True,
-                                         encoding='utf-8',
-                                         errors='replace',
-                                         error_code_ok=True)
+  cmd_result = cros_build_lib.run(cmd=script,
+                                  env=env,
+                                  shell=True,
+                                  print_cmd=False,
+                                  input=os.devnull,
+                                  stdout=True,
+                                  encoding='utf-8',
+                                  errors='replace',
+                                  combine_stdout_stderr=True,
+                                  check=False)
   if cmd_result.returncode:
-    stdout = cmd_result.output
+    stdout = cmd_result.stdout
     if stdout:
       stdout = re.sub('(?m)^', '  ', stdout)
     return HookFailure('Hook script "%s" failed with code %d%s' %
@@ -2075,7 +2077,7 @@
     a blank string upon failure.
   """
   return _run_command(['repo', 'forall', '.', '-c', 'echo ${REPO_PROJECT}'],
-                      redirect_stderr=True, cwd=path).strip()
+                      stderr=True, cwd=path).strip()
 
 
 def direct_main(argv):
@@ -2151,7 +2153,7 @@
   # project from CWD
   if opts.dir is None:
     git_dir = _run_command(['git', 'rev-parse', '--git-dir'],
-                           redirect_stderr=True).strip()
+                           stderr=True).strip()
     if not git_dir:
       raise BadInvocation('The current directory is not part of a git project.')
     opts.dir = os.path.dirname(os.path.abspath(git_dir))
diff --git a/pre-upload_unittest.py b/pre-upload_unittest.py
index 26459f2..e6a3151 100755
--- a/pre-upload_unittest.py
+++ b/pre-upload_unittest.py
@@ -51,7 +51,7 @@
   """Verify we sanely handle unicode content."""
 
   def setUp(self):
-    self.rc_mock = self.PatchObject(cros_build_lib, 'RunCommand')
+    self.rc_mock = self.PatchObject(cros_build_lib, 'run')
 
   def _run(self, content):
     """Helper for round tripping through _run_command."""
