A method comprising: receiving, at a first origin, a request for a web page from a user agent, wherein the user agent is configured to implement a domain security model disallowing interaction between content from different origins across inline frames; accessing a data store of layout information to identify a plurality of content objects (306a, 306b) to add to a base document; and transmitting, from the first origin, the base document to the user agent, wherein the base document comprises a plurality of module inline frame elements (402, 404) respectively corresponding to each of the content objects, each module inline frame element configured to cause the user agent to load a module document from a second origin within an inline frame, wherein the module document comprises a messenger script and the identified content objects; wherein each messenger script is configured, within the context of the user agent, to create, within a corresponding module inline frame, a messenger inline frame element including a location attribute identifying the first origin; responsive to a message sent by one of the content objects, add the message to the location attribute; and provide a new message detected in the location attribute of the messenger inline frame element to the respective content object; wherein the base document further comprises a module connector object configured, within the context of the user agent, to access the location attributes of the messenger inline frame elements to check for new messages; and responsive to a new message, add the new message to the location attributes of corresponding messenger inline frame elements. receiving, at a first origin, a request for a web page from a user agent, wherein the user agent is configured to implement a domain security model disallowing interaction between content from different origins across inline frames; accessing a data store of layout information to identify a plurality of content objects (306a, 306b) to add to a base document; and transmitting, from the first origin, the base document to the user agent, wherein the base document comprises a plurality of module inline frame elements (402, 404) respectively corresponding to each of the content objects, each module inline frame element configured to cause the user agent to load a module document from a second origin within an inline frame, wherein the module document comprises a messenger script and the identified content objects; wherein each messenger script is configured, within the context of the user agent, to create, within a corresponding module inline frame, a messenger inline frame element including a location attribute identifying the first origin; responsive to a message sent by one of the content objects, add the message to the location attribute; and provide a new message detected in the location attribute of the messenger inline frame element to the respective content object; create, within a corresponding module inline frame, a messenger inline frame element including a location attribute identifying the first origin; responsive to a message sent by one of the content objects, add the message to the location attribute; and provide a new message detected in the location attribute of the messenger inline frame element to the respective content object; wherein the base document further comprises a module connector object configured, within the context of the user agent, to access the location attributes of the messenger inline frame elements to check for new messages; and responsive to a new message, add the new message to the location attributes of corresponding messenger inline frame elements. access the location attributes of the messenger inline frame elements to check for new messages; and responsive to a new message, add the new message to the location attributes of corresponding messenger inline frame elements.