do not mutate arguments