add some new features(but not finished)