client observer completer