further componentizing the player