refactor recite method