model & player refactor