generalize template