actually, make this a internal function that returns a new updated version, you can also remove the copying code.