more singleton refactoring