Contributed by Florian Hardwig
Contributed by Stephen Coles
Contributed by Dan Rhatigan
Contributed by brianleli
Contributed by Matthew Wyne