Factory Method template