Optimisations and bug fixes