split propogation into it's own function