adjusted for variable-lengths arguments