API refactor with extension in mind