Implemented:
- use template