support private impl via completion