reorganise Singleton constructor for readability