replace Future with ListenableFuture