fix return value, template function