clean up listeners properly