first commit, no unit test but useful version.