Contributed by Florian Hardwig
Contributed by Paweł Rosner
Contributed by Richard Baird
Contributed by Maxime P.
Contributed by Shiva Nallaperumal