refactor var arg stuff