Contributed by Florian Hardwig
Contributed by Andreas Kofler
Contributed by Garrison Martin
Contributed by Daniel Swan