abstracted events and ratings into separate modules