modify by helloqidi