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