I think returning a new label would be more consistent and user friendly (with in-place, if you want to keep the original label you need two commands, i.e., `new_label = label.copy(); new_label.morph(...)`). In place operations make sense where you can save memory, but all the data is duplicated and reassigned here anyways.