A computer-implemented method comprising: receiving (312, 620), at a first data module, data from a data source; upon receiving the data from the data source, attaching a timestamp to each portion of the received data, wherein the timestamp indicates a time to process the portion of data; sending, from the first data module to a second data module, each portion of the data with the timestamps attached, wherein the first data module is different from the second data module, and the first and second data modules are on a same network; receiving, by the first data module from an access point, a beacon at a first time and storing, by the first data module, the beacon and the first time, wherein the first time is in accordance with a local clock of the first data module; receiving, by the second data module from the access point, the beacon at a second time and storing, by the second data module, the beacon and the second time, wherein the second time is in accordance with a local clock of the second data module, and wherein the beacon received by the first data module is the same beacon that is received by the second data module; upon receiving the beacon at the first time, sending, by the first data module to the second data module, a synchronization signal indicating that the first data module received the beacon at the first time; receiving (320; 625), at the second data module from the first data module, the synchronization signal; determining (322, 630), by the second data module, a drift and/or difference between a clock associated with the first data module and a clock associated with the second data module based on the synchronization signal received from the first data module by comparing data on the beacon and the first time contained in the synchronization signal with data on the beacon and the second time stored in the second data module; processing, by the first data module, the portion of data at the time indicated in the timestamp to process the portion of data; and processing, by the second data module, the portion of data at the time indicated in the timestamp to process the portion of data by adjusting (326, 635) the time indicated in the timestamp with regard to the determined drift and/or difference. receiving (312, 620), at a first data module, data from a data source; upon receiving the data from the data source, attaching a timestamp to each portion of the received data, wherein the timestamp indicates a time to process the portion of data; sending, from the first data module to a second data module, each portion of the data with the timestamps attached, wherein the first data module is different from the second data module, and the first and second data modules are on a same network; receiving, by the first data module from an access point, a beacon at a first time and storing, by the first data module, the beacon and the first time, wherein the first time is in accordance with a local clock of the first data module; receiving, by the second data module from the access point, the beacon at a second time and storing, by the second data module, the beacon and the second time, wherein the second time is in accordance with a local clock of the second data module, and wherein the beacon received by the first data module is the same beacon that is received by the second data module; upon receiving the beacon at the first time, sending, by the first data module to the second data module, a synchronization signal indicating that the first data module received the beacon at the first time; receiving (320; 625), at the second data module from the first data module, the synchronization signal; determining (322, 630), by the second data module, a drift and/or difference between a clock associated with the first data module and a clock associated with the second data module based on the synchronization signal received from the first data module by comparing data on the beacon and the first time contained in the synchronization signal with data on the beacon and the second time stored in the second data module; processing, by the first data module, the portion of data at the time indicated in the timestamp to process the portion of data; and processing, by the second data module, the portion of data at the time indicated in the timestamp to process the portion of data by adjusting (326, 635) the time indicated in the timestamp with regard to the determined drift and/or difference.