add some new features, delete some