replaced Future with CompletionListener