finish all function. great! v1.0