added a comment to clarify structure; TODO: make listening events an object