Contributed by Florian Hardwig
Contributed by Kyle Anderson
Contributed by JAF
Contributed by Tuomo Metso