should this be in a web worker?