refactor to use private properties