use call_user_func instead of invoke method