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