rewrite about event, really to be a interface