Tidy up arguments
Add template validation
Add output argument