use template function