implement the hypermark_protocol behaviour