add the optional 'state' parameter