diff --git a/.github/update-contributing.py b/.github/update-contributing.py
new file mode 100755
index 0000000..41bf352
--- /dev/null
+++ b/.github/update-contributing.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+
+# Header
+contrib = ["""\
+# Contributing to Project U-Ray
+"""]
+
+# Extract the "Contributing" section from README.md
+found = False
+for line in open('README.md'):
+    if found:
+        if line.startswith('# '):
+            # Found the next top level header
+            break
+        contrib.append(line)
+    else:
+        if line.startswith('# Contributing'):
+            found = True
+
+# Footer
+contrib.append("""\
+
+
+
+
+
+
+----
+
+This file is generated from [README.md](README.md), please edit that file then
+run the `./.github/update-contributing.py`.
+
+""")
+
+open("CONTRIBUTING.md", "w").write("".join(contrib))
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..b1bc529
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,97 @@
+# Contributing to Project U-Ray
+
+There are a couple of guidelines when contributing to Project U-Ray which are
+listed here.
+
+### Sending
+
+All contributions should be sent as
+[GitHub Pull requests](https://help.github.com/articles/creating-a-pull-request-from-a-fork/).
+
+### License
+
+All software (code, associated documentation, support files, etc) in the
+Project U-Ray repository are licensed under the very permissive
+[ISC Licence](COPYING). A copy can be found in the [`COPYING`](COPYING) file.
+
+All new contributions must also be released under this license.
+
+### Code of Conduct
+
+By contributing you agree to the [code of conduct](CODE_OF_CONDUCT.md). We
+follow the open source best practice of using the [Contributor
+Covenant](https://www.contributor-covenant.org/) for our Code of Conduct.
+
+### Sign your work
+
+To improve tracking of who did what, we follow the Linux Kernel's
+["sign your work" system](https://github.com/wking/signed-off-by).
+This is also called a
+["DCO" or "Developer's Certificate of Origin"](https://developercertificate.org/).
+
+**All** commits are required to include this sign off and we use the
+[Probot DCO App](https://github.com/probot/dco) to check pull requests for
+this.
+
+The sign-off is a simple line at the end of the explanation for the
+patch, which certifies that you wrote it or otherwise have the right to
+pass it on as a open-source patch.  The rules are pretty simple: if you
+can certify the below:
+
+        Developer's Certificate of Origin 1.1
+
+        By making a contribution to this project, I certify that:
+
+        (a) The contribution was created in whole or in part by me and I
+            have the right to submit it under the open source license
+            indicated in the file; or
+
+        (b) The contribution is based upon previous work that, to the best
+            of my knowledge, is covered under an appropriate open source
+            license and I have the right under that license to submit that
+            work with modifications, whether created in whole or in part
+            by me, under the same open source license (unless I am
+            permitted to submit under a different license), as indicated
+            in the file; or
+
+        (c) The contribution was provided directly to me by some other
+            person who certified (a), (b) or (c) and I have not modified
+            it.
+
+	(d) I understand and agree that this project and the contribution
+	    are public and that a record of the contribution (including all
+	    personal information I submit with it, including my sign-off) is
+	    maintained indefinitely and may be redistributed consistent with
+	    this project or the open source license(s) involved.
+
+then you just add a line saying
+
+	Signed-off-by: Random J Developer <random@developer.example.org>
+
+using your real name (sorry, no pseudonyms or anonymous contributions.)
+
+You can add the signoff as part of your commit statement. For example:
+
+    git commit --signoff -a -m "Fixed some errors."
+
+*Hint:* If you've forgotten to add a signoff to one or more commits, you can use the
+following command to add signoffs to all commits between you and the upstream
+master:
+
+    git rebase --signoff upstream/master
+
+### Contributing to the docs
+
+In addition to the above contribution guidelines, see the guide to
+[updating the Project U-Ray docs](UPDATING-THE-DOCS.md).
+
+
+
+
+
+
+----
+
+This file is generated from [README.md](README.md), please edit that file then
+run the `./.github/update-contributing.py`.
+
diff --git a/README.md b/README.md
index 0924187..b8e2c57 100644
--- a/README.md
+++ b/README.md
@@ -87,4 +87,89 @@
  * XCZU2EG, XCZU2CG, XCZU3EG, XCZU3CG, XCZU4EG, XCZU4CG, XCZU4EV, XCZU5EG,
    XCZU5CG, XCZU5EV, XCZU7EV, XCZU7EG, and XCZU7CG
 
+# Contributing
 
+There are a couple of guidelines when contributing to Project U-Ray which are
+listed here.
+
+### Sending
+
+All contributions should be sent as
+[GitHub Pull requests](https://help.github.com/articles/creating-a-pull-request-from-a-fork/).
+
+### License
+
+All software (code, associated documentation, support files, etc) in the
+Project U-Ray repository are licensed under the very permissive
+[ISC Licence](COPYING). A copy can be found in the [`COPYING`](COPYING) file.
+
+All new contributions must also be released under this license.
+
+### Code of Conduct
+
+By contributing you agree to the [code of conduct](CODE_OF_CONDUCT.md). We
+follow the open source best practice of using the [Contributor
+Covenant](https://www.contributor-covenant.org/) for our Code of Conduct.
+
+### Sign your work
+
+To improve tracking of who did what, we follow the Linux Kernel's
+["sign your work" system](https://github.com/wking/signed-off-by).
+This is also called a
+["DCO" or "Developer's Certificate of Origin"](https://developercertificate.org/).
+
+**All** commits are required to include this sign off and we use the
+[Probot DCO App](https://github.com/probot/dco) to check pull requests for
+this.
+
+The sign-off is a simple line at the end of the explanation for the
+patch, which certifies that you wrote it or otherwise have the right to
+pass it on as a open-source patch.  The rules are pretty simple: if you
+can certify the below:
+
+        Developer's Certificate of Origin 1.1
+
+        By making a contribution to this project, I certify that:
+
+        (a) The contribution was created in whole or in part by me and I
+            have the right to submit it under the open source license
+            indicated in the file; or
+
+        (b) The contribution is based upon previous work that, to the best
+            of my knowledge, is covered under an appropriate open source
+            license and I have the right under that license to submit that
+            work with modifications, whether created in whole or in part
+            by me, under the same open source license (unless I am
+            permitted to submit under a different license), as indicated
+            in the file; or
+
+        (c) The contribution was provided directly to me by some other
+            person who certified (a), (b) or (c) and I have not modified
+            it.
+
+	(d) I understand and agree that this project and the contribution
+	    are public and that a record of the contribution (including all
+	    personal information I submit with it, including my sign-off) is
+	    maintained indefinitely and may be redistributed consistent with
+	    this project or the open source license(s) involved.
+
+then you just add a line saying
+
+	Signed-off-by: Random J Developer <random@developer.example.org>
+
+using your real name (sorry, no pseudonyms or anonymous contributions.)
+
+You can add the signoff as part of your commit statement. For example:
+
+    git commit --signoff -a -m "Fixed some errors."
+
+*Hint:* If you've forgotten to add a signoff to one or more commits, you can use the
+following command to add signoffs to all commits between you and the upstream
+master:
+
+    git rebase --signoff upstream/master
+
+### Contributing to the docs
+
+In addition to the above contribution guidelines, see the guide to
+[updating the Project U-Ray docs](UPDATING-THE-DOCS.md).
diff --git a/third_party/reformat.tcl b/third_party/reformat.tcl
new file mode 100755
index 0000000..c4efb5d
--- /dev/null
+++ b/third_party/reformat.tcl
@@ -0,0 +1,108 @@
+#!/usr/bin/env tclsh
+# From: https://gist.github.com/yyamasak/af250f7ca74e18526734#file-reformat-tcl-L10
+# Which is based on https://wiki.tcl-lang.org/page/Reformatting+Tcl+code+indentation
+# See for licensing
+
+proc reformat {tclcode {pad 4}} {
+    set lines [split $tclcode \n]
+    set out ""
+    set continued no
+    set oddquotes 0
+    set line [lindex $lines 0]
+    set indent [expr {([string length $line]-[string length [string trimleft $line \ \t]])/$pad}]
+    set pad [string repeat " " $pad]
+
+    foreach orig $lines {
+        set newline [string trim $orig \ \t]
+        set line [string repeat $pad $indent]$newline
+        if {[string index $line end] eq "\\"} {
+            if {!$continued} {
+                incr indent 2
+                set continued yes
+            }
+        } elseif {$continued} {
+            incr indent -2
+            set continued no
+        }
+
+        if { ! [regexp {^[ \t]*\#} $line] } {
+
+            # oddquotes contains : 0 when quotes are balanced
+            # and 1 when they are not
+            set oddquotes [expr {([count $line \"] + $oddquotes) % 2}]
+            if {! $oddquotes} {
+                set  nbbraces  [count $line \{]
+                incr nbbraces -[count $line \}]
+                set brace   [string equal [string index $newline end] \{]
+                set unbrace [string equal [string index $newline 0] \}]
+                if {$nbbraces!=0 || $brace || $unbrace} {
+                    incr indent $nbbraces ;# [GWM] 010409 multiple close braces
+                    if {$indent<0} {
+                        error "unbalanced braces"
+                    }
+                    puts $unbrace
+                    puts $pad
+                    puts $nbbraces
+                    set np [expr {$unbrace? [string length $pad]:-$nbbraces*[string length $pad]}]
+                    set line [string range $line $np end]
+                }
+            } else {
+                # unbalanced quotes, preserve original indentation
+                set line $orig
+            }
+        }
+        append out $line\n
+    }
+    return $out
+}
+
+proc eol {} {
+    switch -- $::tcl_platform(platform) {
+        windows {return \r\n}
+        unix {return \n}
+        macintosh {return \r}
+        default {error "no such platform: $::tc_platform(platform)"}
+    }
+}
+
+proc count {string char} {
+    set count 0
+    while {[set idx [string first $char $string]]>=0} {
+        set backslashes 0
+        set nidx $idx
+        while {[string equal [string index $string [incr nidx -1]] \\]} {
+            incr backslashes
+        }
+        if {$backslashes % 2 == 0} {
+            incr count
+        }
+        set string [string range $string [incr idx] end]
+    }
+    return $count
+}
+
+set usage "reformat.tcl ?-indent number? filename"
+
+if {[llength $argv]!=0} {
+    if {[lindex $argv 0] eq "-indent"} {
+        set indent [lindex $argv 1]
+        set argv [lrange $argv 2 end]
+    } else  {
+        set indent 4
+    }
+    if {[llength $argv]>1} {
+        error $usage
+    }
+    set f [open $argv r]
+    set data [read $f]
+    close $f
+
+    set filename "$argv.tmp"
+    set f [open $filename  w]
+
+    puts -nonewline $f [reformat [string map [list [eol] \n] $data] $indent]
+    close $f
+    file copy -force $filename  $argv
+    file delete -force $filename
+
+}
