decoupled listeners, dedicated each shape