basic player implementation