callback control state changing