Contributed by Florian Runge
Contributed by Constança Amador
Contributed by Roman Shamin
Contributed by Florian Hardwig