Contributed by Tomas Mrazauskas
Contributed by Ludwig Übele
Contributed by Florian Hardwig
Contributed by TypeTogether