add template pattern