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