core: token is optional