Some initial work is already done in the `interactive` branch, but a lot to go. I need to define this feature better first though.