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