add eventable, close #3572