refactor and add play/stop