implemeted propagate forward