- use template function