Exposing SynchronousListener to the public + fixing its infinite loop issues.