implement data propagation