Undo/Redo can be problematic when moving objects via transform gizmos - Although I can just trigger it on mouse up - CmdMoveSO, CmdRotateSO, CmdScaleSO It will also be problematic when editing text fields - Technically I can register each character as its own undo operation Then when I leave the text field I register the entire change? How will I detect changes in the inspector? - Just use overriden GUIElements that detect focus lost and changes Multiple stacks - Used for pushing finer or more grained commands - e.g. when starting an edit on an InputBox I do UndoRedo.newStack which returns an unique index I provide when adding commands to UndoRedo. Then I register each invidual keystroke as a separate command. Once the InputBox loses focus though I do UndoRedo.removeStack. How do I register undo/redo on generic properties? - Just use RTTI names for updating/reading those properties - How will I deal with arrays? - Just save/restore the entire array, it should be no different than single fields - What about C# stuff? - For each Serializable class, on re-compile I go and create instances of "ScriptRTTIType" - In constructor that class iterates over all serializable fields in the C# class and fills the mFields array same as custom RTTI classes do