diff --git a/PRESUBMIT.cfg b/PRESUBMIT.cfg
index b1b1d78..b2050c4 100644
--- a/PRESUBMIT.cfg
+++ b/PRESUBMIT.cfg
@@ -1,6 +1,6 @@
 [Hook Scripts]
-hook0 = ../../chromite/bin/cros lint ${PRESUBMIT_FILES}
-hook1 = ./pre-upload_unittest.py
+cros lint = ../../chromite/bin/cros lint ${PRESUBMIT_FILES}
+pre-upload_unittest = ./pre-upload_unittest.py
 
 [Hook Overrides]
 cros_license_check: true
diff --git a/pre-upload.py b/pre-upload.py
index e733982..de65305 100755
--- a/pre-upload.py
+++ b/pre-upload.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python2
+# -*- coding: utf-8 -*-
 # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
@@ -1561,6 +1562,7 @@
       try:
         options = config.get(SECTION_OPTIONS, flag)
         hooks[flag] = functools.partial(hooks[flag], options=options.split())
+        hooks[flag].__name__ = flag
       except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
         pass
 
@@ -1579,9 +1581,7 @@
   if not config.has_section(SECTION):
     return []
 
-  hook_names_values = config.items(SECTION)
-  hook_names_values.sort(key=lambda x: x[0])
-  return [x[1] for x in hook_names_values]
+  return config.items(SECTION)
 
 
 def _get_project_hooks(project, presubmit):
@@ -1621,8 +1621,10 @@
     hooks.extend(hook for hook in _PROJECT_SPECIFIC_HOOKS[project]
                  if hook not in disabled_hooks)
 
-  for script in _get_project_hook_scripts(config):
-    hooks.append(functools.partial(_run_project_hook_script, script))
+  for name, script in _get_project_hook_scripts(config):
+    func = functools.partial(_run_project_hook_script, script)
+    func.__name__ = name
+    hooks.append(func)
 
   return hooks
 
@@ -1681,10 +1683,17 @@
 
   hooks = _get_project_hooks(project.name, presubmit)
   error_found = False
-  for commit in commit_list:
+  commit_count = len(commit_list)
+  for i, commit in enumerate(commit_list):
     error_list = []
     for hook in hooks:
+      output = ('PRESUBMIT.cfg: [%i/%i]: %s: Running %s' %
+                (i + 1, commit_count, commit, hook.__name__))
+      print(output, end='\r')
+      sys.stdout.flush()
       hook_error = hook(project, commit)
+      print(' ' * len(output), end='\r')
+      sys.stdout.flush()
       if hook_error:
         error_list.append(hook_error)
         error_found = True
