Contributed by Diego Aguilar Villalobos
Contributed by Nikolas Wrobel
Contributed by Stephen Coles
Contributed by TypeMates