Contributed by TypeTogether
Contributed by Stephen Coles
Contributed by CAST
Contributed by Vykintas Characiejus