changed Observer to Listener