When you try to implement an undo redo management, you sould chose the good strategy to combine performance and maintanbility. Spécialy about the greanularity of object persistancies.
This project implements 3 types of persistances (Proprety, Item, World).