downward pass function