update async user function to include saving