add event framework