Add optional output arg; Refactor