implementing template
implementing template