Fix listeners circular import issue by using the abstract models

that's ok to do that since the receiver determine the sender based on
`isinstance` method