Graphos (GAP Vector editor) got undo support. Add/remove shapes (that worked already) and proper undo of moving, inspecting and editing shapes.
This required implementing shallow vs. deep copy of the objects, but the deep copy needs to be smart about which references are indeed duplicated and which not... A bit of fun programming!