diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py
index 1e2002f..caffc9d 100644
--- a/Tools/scripts/patchcheck.py
+++ b/Tools/scripts/patchcheck.py
@@ -1,8 +1,11 @@
+import re
+import sys
+import shutil
 import os.path
 import subprocess
-import sys
 
 import reindent
+import untabify
 
 
 def n_files_str(count):
@@ -29,17 +32,26 @@
 
 
 @status("Getting the list of files that have been added/changed",
-            info=lambda x: n_files_str(len(x)))
+        info=lambda x: n_files_str(len(x)))
 def changed_files():
-    """Run ``svn status`` and return a set of files that have been
-    changed/added.
-    """
-    cmd = 'svn status --quiet --non-interactive --ignore-externals'
-    svn_st = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
-    svn_st.wait()
-    output = (x.decode().rstrip().rsplit(None, 1)[-1]
-              for x in svn_st.stdout if x[0] in b'AM')
-    return set(path for path in output if os.path.isfile(path))
+    """Get the list of changed or added files from the VCS."""
+    if os.path.isdir('.hg'):
+        vcs = 'hg'
+        cmd = 'hg status --added --modified --no-status'
+    elif os.path.isdir('.svn'):
+        vcs = 'svn'
+        cmd = 'svn status --quiet --non-interactive --ignore-externals'
+    else:
+        sys.exit('need a checkout to get modified files')
+
+    st = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
+    st.wait()
+    if vcs == 'hg':
+        return [x.decode().rstrip() for x in st.stdout]
+    else:
+        output = (x.decode().rstrip().rsplit(None, 1)[-1]
+                  for x in st.stdout if x[0] in b'AM')
+        return set(path for path in output if os.path.isfile(path))
 
 
 def report_modified_files(file_paths):
@@ -64,6 +76,39 @@
     return fixed
 
 
+@status("Fixing C file whitespace", info=report_modified_files)
+def normalize_c_whitespace(file_paths):
+    """Report if any C files """
+    fixed = []
+    for path in file_paths:
+        with open(path, 'r') as f:
+            if '\t' not in f.read():
+                continue
+        untabify.process(path, 8, verbose=False)
+        fixed.append(path)
+    return fixed
+
+
+ws_re = re.compile(br'\s+(\r?\n)$')
+
+@status("Fixing docs whitespace", info=report_modified_files)
+def normalize_docs_whitespace(file_paths):
+    fixed = []
+    for path in file_paths:
+        try:
+            with open(path, 'rb') as f:
+                lines = f.readlines()
+            new_lines = [ws_re.sub(br'\1', line) for line in lines]
+            if new_lines != lines:
+                shutil.copyfile(path, path + '.bak')
+                with open(path, 'wb') as f:
+                    f.writelines(new_lines)
+                fixed.append(path)
+        except Exception as err:
+            print('Cannot fix %s: %s' % (path, err))
+    return fixed
+
+
 @status("Docs modified", modal=True)
 def docs_modified(file_paths):
     """Report if any file in the Doc directory has been changed."""
@@ -86,12 +131,16 @@
     file_paths = changed_files()
     python_files = [fn for fn in file_paths if fn.endswith('.py')]
     c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
-    docs = [fn for fn in file_paths if fn.startswith('Doc')]
+    doc_files = [fn for fn in file_paths if fn.startswith('Doc')]
     special_files = {'Misc/ACKS', 'Misc/NEWS'} & set(file_paths)
     # PEP 8 whitespace rules enforcement.
     normalize_whitespace(python_files)
+    # C rules enforcement.
+    normalize_c_whitespace(c_files)
+    # Doc whitespace enforcement.
+    normalize_docs_whitespace(doc_files)
     # Docs updated.
-    docs_modified(docs)
+    docs_modified(doc_files)
     # Misc/ACKS changed.
     credit_given(special_files)
     # Misc/NEWS changed.
diff --git a/Tools/scripts/reindent-rst.py b/Tools/scripts/reindent-rst.py
index a19406f..ceb84bf 100755
--- a/Tools/scripts/reindent-rst.py
+++ b/Tools/scripts/reindent-rst.py
@@ -3,27 +3,12 @@
 # Make a reST file compliant to our pre-commit hook.
 # Currently just remove trailing whitespace.
 
+import sys
 
-import sys, re, shutil
-
-ws_re = re.compile(br'\s+(\r?\n)$')
+import patchcheck
 
 def main(argv=sys.argv):
-    rv = 0
-    for filename in argv[1:]:
-        try:
-            with open(filename, 'rb') as f:
-                lines = f.readlines()
-            new_lines = [ws_re.sub(br'\1', line) for line in lines]
-            if new_lines != lines:
-                print('Fixing %s...' % filename)
-            shutil.copyfile(filename, filename + '.bak')
-            with open(filename, 'wb') as f:
-                f.writelines(new_lines)
-        except Exception as err:
-            print('Cannot fix %s: %s' % (filename, err))
-            rv = 1
-    return rv
+    patchcheck.normalize_docs_whitespace(argv[1:])
 
 if __name__ == '__main__':
     sys.exit(main())
diff --git a/Tools/scripts/untabify.py b/Tools/scripts/untabify.py
index 1ad589c..ef63c41 100755
--- a/Tools/scripts/untabify.py
+++ b/Tools/scripts/untabify.py
@@ -25,7 +25,7 @@
         process(filename, tabsize)
 
 
-def process(filename, tabsize):
+def process(filename, tabsize, verbose=True):
     try:
         with open(filename) as f:
             text = f.read()
@@ -46,7 +46,8 @@
         pass
     with open(filename, "w") as f:
         f.write(newtext)
-    print(filename)
+    if verbose:
+        print(filename)
 
 
 if __name__ == '__main__':
