Contributed by Florian Hardwig
Contributed by Matthijs Sluiter
Contributed by mikel antonio
Contributed by Stephen Coles