updated generic template