Refactored to use private and protected sets