Contributed by Jan Maack
Contributed by Pavel Kedzich
Contributed by Ryan Heape
Contributed by Stephen Coles