bug fixes and optimisation