fixed callback order