refactor playback