add some features. not finished yet