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