recusive auto update