design pattern - singleton added