use a struct for signature