fix infinite loop bug in value update propagation ( and make it much better )