improve f.propagate