template listener