tempalte function