slightly change the API;