Contributed by Linus Knappe
Contributed by David Jonathan Ross
Contributed by Rick Cuenca
Contributed by Matthijs Sluiter