added core object immutability to undo/redo implementation section