I tried hacking up my idea for implementing buffer-local faces, here's a patch. The user interface is the variable `face-remappings': Alist of face mappings. Each element is of the form: (FACE . NEW-FACE) or (FACE NEW-FACE MERGE-FACE...), which causes NEW-FACE to be used where FACE normally would. If present, MERGE-FACE... are merged during display with NEW-FACE. E.g., try evaluating the following in some buffer: (set (make-local-variable 'face-remappings) '((default . bold))) It works (or seems to!) with other special faces like mode-line, etc., too. Here's the patch; lemme know what you think: