speed up gathers greatly by doing most operations in parallel