Zmiana logiki - ctx jest dla każdego listenera osobny