refactored player object