restructured to streamline populateAll and populateEvents