Contributed by Florian Hardwig
Contributed by tobias schererbauer
Contributed by Ricardo Baez
Contributed by Álvaro Franca