fix #4: add TemplateEngine