uses parallel processing