refactored play functions