make it less copy, and faster