Here's a solution to THIS bug, for real this time. I'm attaching a tested-working patch. I'm no longer sure this is a regression since it's very sensitive to load order. In emacs 24.3 if ERC is byte-compiled then the bug manifests, but if it isn't then it works ok. In any case, the patch solves the issue regardless. To reiterate, ERC works if you start emacs with no init file, and then evaluate (require 'erc) (require 'erc-desktop-notifications) (erc-notifications-enable) However ERC does NOT work if you start with just this in the init file: (eval-after-load 'erc '(progn (require 'erc-desktop-notifications) (erc-notifications-enable) )) The issue is that in the working case, the value of erc-server-PRIVMSG-functions ends up as (erc-notifications-PRIVMSG erc-auto-query erc-server-PRIVMSG) and in the broken case as (erc-auto-query erc-notifications-PRIVMSG) erc-server-PRIVMSG is important, so ERC does not work correctly if it is missing. This missing element is normally added in erc-backend.el by (define-erc-response-handler (PRIVMSG NOTICE) ... which is a macro. In the macro, the significant line is (defvar ,hook-name ',fn-name ,(format hook-doc name)) If we have some (eval-after-load 'erc ...) stuff then by the time this (defvar) is evaluated, the list may already have a value, so the defvar then does NOT add its value to the list. The patch explicitly changes the (defvar list default) idiom to (defvar list nil) (add-to-list 'list default) and thus the default value always appears in the list.