refactor to use GCD and blocks