update code and add more features
update