refactor + retro gen api