added singlton design pattern