takes args directly rather than through an object