major enhancement: simplify listener