Part 1: Interface changes
Part 2: Implementation