Contributed by D Jones
Contributed by Florian Hardwig
Contributed by Joshua Bodwell
Contributed by Stephen Coles