diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py
index 8029183b0d9338d739c4fd798a57b83bf4658398..8dae64b4693eac711d8395593d02a958d3c976b6 100644
--- a/product/ERP5/Document/BusinessTemplate.py
+++ b/product/ERP5/Document/BusinessTemplate.py
@@ -1869,6 +1869,7 @@ class ToolTemplateItem(PathTemplateItem):
   def install(self, context, trashbin, **kw):
     """ When we install a tool that is a type provider not
     registered on types tool, register it into the type provider.
+    We also need to register the tool on the site manager
     """
     PathTemplateItem.install(self, context, trashbin, **kw)
     portal = context.getPortalObject()
@@ -1879,6 +1880,8 @@ class ToolTemplateItem(PathTemplateItem):
           type_container_id not in types_tool.type_provider_list):
         types_tool.type_provider_list = tuple(types_tool.type_provider_list) + \
                                         (type_container_id,)
+    tool_id_list = list(set(self._objects.keys()) & set(portal._registry_tool_id_list))
+    portal._registerTools(tool_id_list)
 
   def uninstall(self, context, **kw):
     """ When we uninstall a tool, unregister it from the type provider. """
diff --git a/product/ERP5/ERP5Site.py b/product/ERP5/ERP5Site.py
index 725624a0dcefbb2d4936085da6923cb59faa7626..89e7a77ff35929ec9e793f645774f0ab19ab9188 100644
--- a/product/ERP5/ERP5Site.py
+++ b/product/ERP5/ERP5Site.py
@@ -351,27 +351,32 @@ class ERP5Site(ResponseHeaderGenerator, FolderMixIn, PortalObjectBase, CacheCook
                            provided=ITranslationDomain,
                            name=alias)
 
+  _registry_tool_id_list = 'caching_policy_manager',
   def _registerMissingTools(self):
-    from Products.CMFCore import interfaces, utils
     tool_id_list = ("portal_skins", "portal_types", "portal_membership",
                     "portal_url", "portal_workflow")
     if (None in map(self.get, tool_id_list) or not
         TransactionalResource.registerOnce(__name__, 'site_manager', self.id)):
       return
-    sm = self._components
-    for tool_id in tool_id_list:
-      tool = self[tool_id]
-      tool_interface = utils._tool_interface_registry.get(tool_id)
-      if tool_interface is not None:
-        # Note: already registered tools will be either:
-        # - updated
-        # - registered again after being unregistered
-        sm.registerUtility(aq_base(tool), tool_interface)
+    self._registerTools(tool_id_list + self._registry_tool_id_list)
     def markRegistered(txn):
       global _missing_tools_registered
       _missing_tools_registered = self.id
     TransactionalResource(tpc_finish=markRegistered)
 
+  def _registerTools(self, tool_id_list):
+    from Products.CMFCore import interfaces, utils
+    sm = self._components
+    for tool_id in tool_id_list:
+      tool = self.get(tool_id, None)
+      if tool:
+        tool_interface = utils._tool_interface_registry.get(tool_id)
+        if tool_interface is not None:
+          # Note: already registered tools will be either:
+          # - updated
+          # - registered again after being unregistered
+          sm.registerUtility(aq_base(tool), tool_interface)
+
   # backward compatibility auto-migration
   def getSiteManager(self):
     # NOTE: do not add a docstring! This method is private by virtue of