1.2 Release
There is a change in how undo manager is constructed. Instead of providing an unapply function, you now need to provide an invert function that returns an inverse of a given change, such that
unapply(change) = apply(invert(change))
It is now also required that the change objects properly implement equals.
While these changes pose additional requirements on the user side, it allows the implementation to detect potential problems in the application: whenever the UndoManager is applying a change, it expects to receive the exact same change (up to equals) in the observed EventStream of changes. If this does not happen, it is very likely a problem that otherwise could go undetected.