switch to waitgroup for push