adding explanation of upon()