template-based approach