to add more function, but not finished.