modify to adapt to the requirement