separated player thread and player implementation