self-modifying function