add audit function