template design pattern added