added optional web workers so that UI is not blocked