further performance optimisations