A computer-implemented method comprising, at an intermediary process (110a, 110b, 110c) acting as an intermediary between a publisher system and a plurality of subscriber processes (120a, 120b, 120c), the intermediary process having a publisher data store storing one or more subscriptions for which the intermediary process is a publisher, a subscriber data store storing one or more subscriptions for which the intermediary process is a subscriber, and a state data store storing state data and comprising an active state data store and an inert state data store: receiving (S460, 1060) first event data from the publisher system; updating the state data in the state data store based on the first event data; generating, from the state data in the active state data store, second event data according to a first subscription associated with a first one of the subscriber processes in the publisher data store, wherein the second event data is generated responsive to determining that a connection between the first subscriber process and the intermediary process is ready to be written to, having completed previous data sends; and sending the second event data to the first subscriber process, wherein updating the state data comprises: updating the state data in the inert state data store based on the first event data; atomically swapping the inert state data store and the active state data store, wherein the swapping is atomic in that the generating of the second event data is performed using a state data store which is static for a duration of the generating of the second event data; and updating the state data in the inert state data store - which was, until the swapping, the active state data store - to match the state data in the active state data store. receiving (S460, 1060) first event data from the publisher system; updating the state data in the state data store based on the first event data; generating, from the state data in the active state data store, second event data according to a first subscription associated with a first one of the subscriber processes in the publisher data store, wherein the second event data is generated responsive to determining that a connection between the first subscriber process and the intermediary process is ready to be written to, having completed previous data sends; and sending the second event data to the first subscriber process, wherein updating the state data comprises: updating the state data in the inert state data store based on the first event data; atomically swapping the inert state data store and the active state data store, wherein the swapping is atomic in that the generating of the second event data is performed using a state data store which is static for a duration of the generating of the second event data; and updating the state data in the inert state data store - which was, until the swapping, the active state data store - to match the state data in the active state data store. updating the state data in the inert state data store based on the first event data; atomically swapping the inert state data store and the active state data store, wherein the swapping is atomic in that the generating of the second event data is performed using a state data store which is static for a duration of the generating of the second event data; and updating the state data in the inert state data store - which was, until the swapping, the active state data store - to match the state data in the active state data store.