follow the upstream API