optimised mutator