Contributed by Alexandre Cano
Contributed by Sam Berlow
Contributed by Andreas Kofler
Contributed by Stephen Coles