add a end-user function