added design for addEvent