A lot of optimisations