I would like to propose the following patch that makes the register system easier to hook into. With this change, for example, if one wants to make a command to save a keyboard macro to a register. There is no need to change register.el. 3rd party libraries such as undo-tree.el can add registers of undo state that one can jump to with C-x r j. With this change, register is now a compound data structure. I have also removed one inconsistent use of the argument REGISTER. In the new code it always refers to the register object and never the name. There is only one small incompatible change, set-register now returns the register object but the return value of register-set is rarely used. Other than that it should be 100% backward compatible. Let me know if not. Leo