even more optimisations