Contributed by Florian Hardwig
Contributed by Jan Middendorp
Contributed by Mathieu Christe
Contributed by Stephen Coles