offloaded some of the data processing to userland