TODO: consider find_and_modify()