return fn for better tracking