I agree that using advice is probably the way to go, but if you really, truly have to, you can use something like this. (Comments are welcome.) <!-- language-all: lang-el --> (defun third-party-func () (message "original")) (fset 'third-party-func-original (symbol-function 'third-party-func)) (defun third-party-func () (message "new!") (third-party-func-original)) ; now (third-party-func) calls the patched version; ; (third-party-func-original) calls the original version