`flyspell-prog-mode' uses the original M-TAB binding outside of comments, which is nice (see bug#18533). However, it doesn't account for remapped commands. For example, I remap `completion-at-point' to `company-complete' when `company-mode' is active. If I hit M-TAB while `company-mode' and `flyspell-prog-mode' are active, I get `completion-at-point', which isn't what I want. To reproduce this issue, you can do the following: emacs -Q (global-set-key [remap completion-at-point] (lambda () (interactive) (message "remapped"))) M-x flyspell-prog-mode M-TAB ;; Or C-M-i I've attached a patch that fixes the issue (hopefully it works in all cases; it works for me).