support custom templates