Contributed by Andreas Kofler
Contributed by Stephen Coles
Contributed by Nick Shinn
Contributed by ben Urbain