only use one closure to handle completion for better syntax