Contributed by Jérôme Knebusch
Contributed by Gareth Hague
Contributed by David Sieren
Contributed by Aníbal Hernández