optimise method added