update
update
some optimisations