added a listen interface so users can perform custom actions on the recieved object