basic player layer implementation