I have my own user defined key-bindings as described here: Globally override key binding in Emacs
Whenever I load a new major mode, say OrgMode, I have some of my bindings over-written to fit my needs in that specific mode. But then when I load another major mode, which have its own over-writes, they stay put even if I'm not in a buffer with that major mode anymore.
For example
(define-key custom-keys-mode-map (kbd "C-p") 'some-cool-function)
(add-hook 'org-mode-hook
(lambda ()
(define-key custom-keys-mode-map (kbd "C-p") 'org-cool-function )))
(add-hook 'sunrise-mode-hook
(lambda ()
(define-key custom-keys-mode-map (kbd "C-p") 'sunrise-cool-function )))
At first I use C-p to execute my cool, default, function. After I load Org-Mode I use C-p to execute "org-cool-function", and when I load Sunrise-Commander, C-p executes "sunrise-cool-function".
But then when I go back to an Org-Mode file, C-p still tries to execute "sunrise-cool-function" instead of "org-cool-function".
Hope I'm clear:)