perfect no notify function