added PlayerSource to use a parameter for Player (instead of Map<>)