Move more of the interaction code out to the interface layer