Complete API redesign (part 3)