Contributed by Jens Riedweg
Contributed by Matthijs Herzberg
Contributed by Stephen Coles
Contributed by TypeMates