further optimisations