Contributed by Mark Bloom
Contributed by Julian Schröpel
Contributed by Florian Hardwig
Contributed by Maurizio Piacenza