diff --git a/ChangeLog b/ChangeLog
index 4538d0f..da70b6d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2014-08-14  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+
+	* tex.el (TeX-style-hook-list): Update docstring to make clear
+	that style hooks can also be in the form
+	'[TeX-style-hook HOOK-FUN CONTEXT]'
+	(TeX-style-hook-context): New defvar, used to have style hooks
+	called only in corresponding context.
+	(TeX-add-style-hook): Add optional argument context for marking
+	hooks that must run only in non default (aka nil) context.
+	(TeX-keep-hooks-in-context): New defun, used for unloading only
+	those hooks in a context list.
+	(TeX-unload-style): Add optional argument context-list for
+	unloading only those hooks marked for contexts in that
+	context-list.
+	(TeX-run-style-hooks): Run style hook only when current style hook
+	context matches context for which hook is marked.
+
+	* tex-info.el (TeX-texinfo-mode): set 'TeX-style-hook-context' to
+	:texinfo for Texinfo files.
+
 2014-08-13  Vincent Belaïche  <vincentb1@users.sourceforge.net>
 
 	* tex-info.el (TeX-texinfo-mode): Code optimization: use
diff --git a/tex-info.el b/tex-info.el
index 849e94f..9dc2f29 100644
--- a/tex-info.el
+++ b/tex-info.el
@@ -604,6 +604,7 @@ value of `Texinfo-mode-hook'."
 
   (set (make-local-variable 'TeX-font-list) Texinfo-font-list)
   (set (make-local-variable 'TeX-font-replace-function) 'TeX-font-replace-macro)
+  (set (make-local-variable 'TeX-style-hook-context) :texinfo)
 
   (add-hook 'find-file-hooks (lambda ()
 			       (unless (file-exists-p (buffer-file-name))
diff --git a/tex.el b/tex.el
index 068859f..6431f79 100644
--- a/tex.el
+++ b/tex.el
@@ -2318,9 +2318,37 @@ Used when checking if any files have changed."
 (defvar TeX-style-hook-list nil
   "List of TeX style hooks currently loaded.
 
-Each entry is a list where the first element is the name of the style,
-and the remaining elements are hooks to be run when that style is
-active.")
+Each entry is a list:
+
+ (STYLE HOOK1 HOOK2 ...)
+
+where the first element  STYLE is the name of the style,
+and the remaining elements HOOKN, if any, are hooks to be run when that style is
+active. 
+
+A hook HOOKN may a hook function HOOK-FUN to be run in non-Texinfo
+context only, or a vector [TeX-style-hook HOOK-FUN CONTEXT] where
+HOOK-FUN is the hook function to be run, and CONTEXT is a symbol
+defining in which context the hook function may be run. 
+
+Supported contexts are:
+
+* 'nil' for non-Texinfo, or
+*  ':texinfo' for Texinfo
+
+HOOK-FUN alone is therefore equivalent to:
+
+  [TeX-style-hook HOOK-FUN nil].")
+
+(defvar TeX-style-hook-context nil
+  "Context for running hooks locally to the considered file.
+May take two values:
+
+* 'nil'      for non-Texinfo files
+* ':texinfo' for Texinfo files.
+
+Purpose is to prevent non-Texinfo hooks to be run in Texinfo
+files, due to ambiguous style name, as this may cause bad side effect e.g. on variable 'TeX-font-list'.")
 
 (defcustom TeX-byte-compile nil
   "*Not nil means try to byte compile auto files before loading."
@@ -2373,9 +2401,14 @@ active.")
 	  ((file-readable-p el)
 	   (load-file el)))))
 
-(defun TeX-add-style-hook (style hook)
-  "Give STYLE yet another HOOK to run."
+(defun TeX-add-style-hook (style hook &optional context)
+  "Give STYLE yet another HOOK to run. 
+
+CONTEXT serves the purpose of marking the hook to be run only in
+that context. See variable 'TeX-style-hook-context' for supported
+style hook contexts."
   (let ((entry (assoc style TeX-style-hook-list)))
+    (and context (setq hook (vector 'TeX-style-hook hook context)))
     (cond ((null entry)
 	   ;; New style, add entry.
 	   (setq TeX-style-hook-list (cons (list style hook)
@@ -2387,11 +2420,27 @@ active.")
 	   ;; Old style, new hook.
 	   (setcdr entry (cons hook (cdr entry)))))))
 
-(defun TeX-unload-style (style)
-  "Forget that we once loaded STYLE."
+(defun TeX-keep-hooks-in-context (hooks context-list)
+  "Scan HOOKS for all hooks the associated context of which is
+found in CONTEXT-LIST and return the list thereof."
+  (let (ret context)
+    (dolist (hook hooks)
+      (setq context (and (vectorp hook) (eq (aref hook 0) 'TeX-style-hook) (aref hook 2)))
+      (if (memq context context-list)
+	  (push hook ret)))
+    ret))
+	    
+(defun TeX-unload-style (style &optional context-list)
+  "Forget that we once loaded STYLE. If CONTEXT-LIST is provide
+the STYLE is only removed for those contexts in CONTEXT-LIST. 
+
+See variable 'TeX-style-hook-context' for supported contexts."
   (let ((style-data (assoc-string style TeX-style-hook-list)))
     (if style-data
-	(setq TeX-style-hook-list (delq style-data TeX-style-hook-list)))))
+	(let ((hooks (and context-list (TeX-keep-hooks-in-context (cdr style-data) context-list))))
+	  (if hooks
+	      (setcdr style-data hooks)
+	    (setq TeX-style-hook-list (delq style-data TeX-style-hook-list)))))))
 
 (defcustom TeX-virgin-style (if (and TeX-auto-global
 				     (file-directory-p TeX-auto-global))
@@ -2424,7 +2473,16 @@ active.")
 			style (substring style
 					 (match-beginning 2) (match-end 2))))
 		(condition-case err
-		    (mapcar 'funcall
+		    (mapcar (lambda (hook)
+			      (cond
+			       ((and (function-p hook)
+				     (nullp TeX-style-hook-context))
+				     (funcall hook))
+			       ((and (vectorp hook)
+				     (eq (aref hook 0) 'TeX-style-hook)
+				     (eq (aref hook 2) TeX-style-hook-context))
+				(funcall (aref hook 1)))
+			       (t (error "Invalid style hook %S" hook))))
 			    (cdr-safe (assoc-string style TeX-style-hook-list)))
 		  ;; This happens in case some style added a new parser, and
 		  ;; now the style isn't used anymore (user deleted
