This feels a bit like a pub/sub pattern; I wonder what it would look like with a full pub/sub implementation.