A method of synchronizing data between a client device and a remote server, the client device storing a plurality of buckets of information each including a plurality of field-value pairs, the remote server storing a plurality of buckets (190, 192, 194, 196) of information each including a plurality of field-value pairs, the method comprising: receiving, at the remote server from the client device, a device type of the client device; allocating, after receiving the device type, the plurality of buckets (190, 192, 194, 196) of information at the remote server for the client device, wherein: a configuration of the plurality of buckets (190, 192, 194, 196) of information at the remote server is determined based on the device type; and the plurality of buckets (190, 192, 194, 196) of information at the remote server corresponds to the already-existing plurality of buckets of information stored on the client device; receiving, from the client device, content with which to populate the plurality of buckets (190, 192, 194, 196) of information at the remote server; receiving, at the remote server from the client device, a subscription request identifying a bucket of information stored on the remote server, the identified bucket of information corresponding to one of the plurality of buckets of information stored at the client device; determining (1452, 1610), by the remote server, whether there is a difference in state between the identified bucket of information stored at the remote server and the corresponding bucket of information stored at the client device; notifying (1450, 1612), if it is determined (1452, 1610) that there is a difference in state between the identified bucket of information stored at the remote server and the corresponding bucket of information stored at the client device, the client device with information representative of at least one difference between the identified bucket of information stored at the remote server and the corresponding bucket of information stored at the client device. receiving, at the remote server from the client device, a device type of the client device; allocating, after receiving the device type, the plurality of buckets (190, 192, 194, 196) of information at the remote server for the client device, wherein: a configuration of the plurality of buckets (190, 192, 194, 196) of information at the remote server is determined based on the device type; and the plurality of buckets (190, 192, 194, 196) of information at the remote server corresponds to the already-existing plurality of buckets of information stored on the client device; a configuration of the plurality of buckets (190, 192, 194, 196) of information at the remote server is determined based on the device type; and the plurality of buckets (190, 192, 194, 196) of information at the remote server corresponds to the already-existing plurality of buckets of information stored on the client device; receiving, from the client device, content with which to populate the plurality of buckets (190, 192, 194, 196) of information at the remote server; receiving, at the remote server from the client device, a subscription request identifying a bucket of information stored on the remote server, the identified bucket of information corresponding to one of the plurality of buckets of information stored at the client device; determining (1452, 1610), by the remote server, whether there is a difference in state between the identified bucket of information stored at the remote server and the corresponding bucket of information stored at the client device; notifying (1450, 1612), if it is determined (1452, 1610) that there is a difference in state between the identified bucket of information stored at the remote server and the corresponding bucket of information stored at the client device, the client device with information representative of at least one difference between the identified bucket of information stored at the remote server and the corresponding bucket of information stored at the client device.