refactored to use subview methods