try a concurrent approach. it's slower