add some features
merge a new big branch