Add more and more functionalities, but still need more test