add arguments, refactor