@seanlong This is not really necessary. The implementation you have is very similar to the EventTarget, it is up to you to see whenever it can reused. That said, this is how EventTarget is implemented for SysApps:

- When you add a listener for an event, you add it to a list of listeners held by the EventTarget.
- If it is the first listener, you send to the native a message to start the event. Store the callback in the EventTarget and make sure it returns "true", which makes it persistent (the default is "one shot").
- If it not the first listener, just add it to the list.
- In the native side, store the FunctionInfo and call it when a event happens. The FunctionInfo has internally the callback ID and will route it to the appropriated callback, which is the one we have stored for a particular event.
- Back to the JavaScript, when the event arrives, the callback will go through the list of listener an fire each on of them.
- If you remove a listener, send a message to native to stop the event if there is no listener left.