Added GCD to allow UI updates be done on main thread