diff --git a/bt5/erp5_corporate_identity/SkinTemplateItem/portal_skins/erp5_corporate_identity/WebPage_downgradeHeaders.py b/bt5/erp5_corporate_identity/SkinTemplateItem/portal_skins/erp5_corporate_identity/WebPage_downgradeHeaders.py
index c35ad5a95e78ef9b944f2307f6faaffe7d790db2..5f5eb4b029a966909ed5095ec63a83566e8e7fdb 100644
--- a/bt5/erp5_corporate_identity/SkinTemplateItem/portal_skins/erp5_corporate_identity/WebPage_downgradeHeaders.py
+++ b/bt5/erp5_corporate_identity/SkinTemplateItem/portal_skins/erp5_corporate_identity/WebPage_downgradeHeaders.py
@@ -5,17 +5,15 @@ Downgrade headers in passed content by 1 or number of levels specified
 """
 import re
 
-def pushDown(level):
-  return ''.join(["h", str(level), ">"])
+REGEXP = re.compile('<h([1-6]).*>.*</h([1-6])>')
 
-for header in re.findall("<h[1-6].*</h[1-6]>", content or ""):
-  header_list = re.findall("<(h[1-6]>)", header)
-  if len(header_list):
-    tag = header_list[0] #h2>
-    key = tag[1]
-    content = content.replace(
-      header,
-      header.replace(tag, pushDown(int(key) + (downgrade or 1)))
-    )
+def pushDown(regexp_match):
+  text = '%r' % regexp_match.group()
+  start_level = regexp_match.group(1)
+  stop_level = regexp_match.group(2)
+  if (start_level == stop_level):
+    next_level = "%i" % (int(start_level) + downgrade)
+    text = '<h' + next_level + text[4:-3] + next_level + '>'
+  return text
 
-return content
+return REGEXP.sub(pushDown, content)