arguments refactor almost done