templatemethod