added singleton design pattern