Refact for listener, and add context support
Refact for context