support thunk style calling