Hello Pierre. Pierre Rouleau writes: > (defcustom pel-key-chords > '((global "<>" ("<>\C-b")) > (global "[]" ("[]\C-b")) > (c-mode "{}" ("{\n\n}\C-p")) > (c++-mode "{}" ("{\n\n}\C-p"))) > ;; (flyspell-mode "4r" flyspell-correct-word-before-point) > ;; (flyspell-prog-mode "4r" flyspell-correct-word-before-point) > ;; (global "6y" pel-find-file-at-point-in-window) > ;; (global ".;" pel-search-word-from-top)) My guess is that the functions you are using here are not known to be defined by the time you want to customize the variable. In other words, `functionp' returns nil for these symbols at that time. I followed this recipe: 1. Start emacs -Q 2. In the *scratch* buffer, I evaluated the following: (defcustom pel-key-chords '((global "<>" ("<>\C-b")) (c-mode "{}" ("{\n\n}\C-p")) (flyspell-mode "4r" flyspell-correct-word-before-point) (global ".;" pel-search-word-from-top)) "..." :type '(repeat (choice (list :tag "expansion-keys" (symbol :tag "mode" :value global) (string :tag "chars") (repeat (key-sequence :tag "key"))) (list :tag "command" (symbol :tag "mode" :value global) (string :tag "chars") (function :tag "command"))))) 3. M-x customize-option RET pel-key-chords That gives me the mismatch message. At this time, flyspell isn't loaded, and `pel-search-word-from-top' is not defined. 4. C-x k RET, to kill the customize buffer. 5. Eval: (require 'flyspell) (defun pel-search-word-from-top () (ignore)) 6. Again: M-x customize-option RET pel-key-chords Now I see the customize buffer as expected, with the state being STANDARD. Would you try the above, to check if my guess is correct?