diff --git a/docs/fixup-headers.py b/docs/fixup-headers.py
new file mode 100755
index 0000000..b140ddf
--- /dev/null
+++ b/docs/fixup-headers.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+# Copyright 2020 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+
+import os.path
+import sys
+import tempfile
+from collections import defaultdict
+
+
+def count_chars(l):
+    o = defaultdict(lambda: 0)
+    for i in l:
+        o[i] += 1
+    if '\n' in o:
+        del o['\n']
+    return dict(o)
+
+
+def main(argv):
+    assert len(argv) == 1, argv
+
+    fname = argv[0]
+    assert fname.endswith('.rst'), fname
+    assert os.path.exists(fname), fname
+
+    output = ['',]
+    with open(fname) as f:
+        for l in f:
+            output.append(l)
+            c = count_chars(l)
+            if len(c) != 1:
+                continue
+
+            header = list(c.keys())[0]
+            if header not in ['-', '=', '+', '~']:
+                print("Possible header?", repr(l))
+                continue
+
+            lastline = output[-2]
+
+            if len(lastline) <= 4:
+                continue
+
+            oheader = (header * (len(lastline)-1))+'\n'
+            output[-1] = oheader
+
+    with open(fname, 'w') as f:
+        f.write("".join(output[1:]))
+
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv[1:]))
