The thing that really tripped me up was the deep cloning. Not only do you have to implement and define the clone method, you have to give the clone its own instances of the mutable fields off of the object you’re cloning, otherwise the snapshot changes along with the original. For example if your object contains a list of cards creatively named cardList, within the clone method you need to say “clone.cardList = cardList;” otherwise it’ll constantly change, and that’s not what you want for undo. Other than that it was pretty straightforward.