lower level pp function