Contributed by Florian Hardwig
Contributed by Christopher Slye
Contributed by Davide Moschini
Contributed by Stephen Coles