Based of code by Alexandre Vaccasin