re-factored listeners