refactor generic play() method, needs work