Contributed by Ben Loiz
Contributed by Joshua Gajownik
Contributed by Florian Hardwig
Contributed by Stephen Coles