Contributed by Artyom Geller
Contributed by Jargon Scott
Contributed by Benoît Bodhuin
Contributed by Florian Hardwig
Contributed by Andrij Shevchenko