Use NSOperationQueue instead of GCD
Cancel NSOperationQueue operations when we stop
Revert delegate