diff --git a/bt5/erp5_web_project_ui/PathTemplateItem/web_page_module/project_gadget_erp5_appcache.xml b/bt5/erp5_web_project_ui/PathTemplateItem/web_page_module/project_gadget_erp5_appcache.xml
index cfd13f66bb2256eb46fd517b01e06a9bcadec827..e03bee99debd0d8ac307ba07f4f0748b4e117a6a 100644
--- a/bt5/erp5_web_project_ui/PathTemplateItem/web_page_module/project_gadget_erp5_appcache.xml
+++ b/bt5/erp5_web_project_ui/PathTemplateItem/web_page_module/project_gadget_erp5_appcache.xml
@@ -104,171 +104,7 @@
         <item>
             <key> <string>text_content</string> </key>
             <value> <string>CACHE MANIFEST\n
-# Last modified by WebSite_checkCacheModificationDateConsistency on 2020/02/17 16:16:48.764908 UTC\n
-# Last modified by WebSite_checkCacheModificationDateConsistency on 2020/02/13 13:52:33.469635 UTC\n
-# Last modified by WebSite_checkCacheModificationDateConsistency on 2020/02/11 16:57:5.252796 UTC\n
-# Last modified by WebSite_checkCacheModificationDateConsistency on 2020/02/04 16:04:40.604365 UTC\n
-# Last modified by WebSite_checkCacheModificationDateConsistency on 2020/01/31 13:15:1.653746 UTC\n
-# generated on Thu, 19 Sep 2019 00:00:00 GMT+0100\n
-# XXX + fonts\n
-# images/ajax-loader.gif\n
 CACHE:\n
-\n
-gadget_erp5_page_project_controller.html\n
-gadget_erp5_page_project_controller.js\n
-gadget_project_info.html\n
-gadget_project_info.js\n
-gadget_erp5_page_project_redirector.html\n
-gadget_erp5_page_project_redirector.js\n
-gadget_erp5_project_panel.html\n
-gadget_erp5_project_panel.js\n
-\n
-favicon.ico\n
-font-awesome/font-awesome-webfont.eot\n
-font-awesome/font-awesome-webfont.woff\n
-font-awesome/font-awesome-webfont.woff2\n
-font-awesome/font-awesome-webfont.ttf\n
-font-awesome/font-awesome-webfont.svg\n
-gadget_erp5_worklist_empty.svg?format=svg\n
-erp5_launcher_nojqm.js\n
-gadget_erp5_nojqm.css\n
-gadget_erp5_configure_editor.html\n
-gadget_erp5_configure_editor.js\n
-gadget_erp5_editor_panel.html\n
-gadget_erp5_editor_panel.js\n
-gadget_erp5_field_checkbox.html\n
-gadget_erp5_field_checkbox.js\n
-gadget_erp5_field_datetime.html\n
-gadget_erp5_field_datetime.js\n
-gadget_erp5_field_editor.html\n
-gadget_erp5_field_editor.js\n
-gadget_erp5_field_email.html\n
-gadget_erp5_field_email.js\n
-gadget_erp5_field_file.html\n
-gadget_erp5_field_file.js\n
-gadget_erp5_field_float.html\n
-gadget_erp5_field_float.js\n
-gadget_erp5_field_formbox.html\n
-gadget_erp5_field_formbox.js\n
-gadget_erp5_field_gadget.html\n
-gadget_erp5_field_gadget.js\n
-gadget_erp5_field_image.html\n
-gadget_erp5_field_image.js\n
-gadget_erp5_field_integer.html\n
-gadget_erp5_field_integer.js\n
-gadget_erp5_field_list.html\n
-gadget_erp5_field_list.js\n
-gadget_erp5_field_lines.html\n
-gadget_erp5_field_lines.js\n
-gadget_erp5_field_listbox.html\n
-gadget_erp5_field_listbox.js\n
-gadget_erp5_field_matrixbox.html\n
-gadget_erp5_field_matrixbox.js\n
-gadget_erp5_field_multicheckbox.html\n
-gadget_erp5_field_multicheckbox.js\n
-gadget_erp5_field_multilist.html\n
-gadget_erp5_field_multilist.js\n
-gadget_erp5_field_multirelationstring.html\n
-gadget_erp5_field_multirelationstring.js\n
-gadget_erp5_field_radio.html\n
-gadget_erp5_field_radio.js\n
-gadget_erp5_field_readonly.html\n
-gadget_erp5_field_readonly.js\n
-gadget_erp5_field_relationstring.html\n
-gadget_erp5_field_relationstring.js\n
-gadget_erp5_field_string.html\n
-gadget_erp5_field_string.js\n
-gadget_erp5_field_password.html\n
-gadget_erp5_field_password.js\n
-gadget_erp5_field_textarea.html\n
-gadget_erp5_field_textarea.js\n
-gadget_erp5_form.html\n
-gadget_erp5_form.js\n
-gadget_erp5_header.html\n
-gadget_erp5_header.js\n
-gadget_erp5_jio.html\n
-gadget_erp5_jio.js\n
-gadget_erp5_label_field.html\n
-gadget_erp5_label_field.js\n
-gadget_erp5_notification.html\n
-gadget_erp5_notification.js\n
-gadget_erp5_page_action.html\n
-gadget_erp5_page_action.js\n
-gadget_erp5_page_export.html\n
-gadget_erp5_page_export.js\n
-gadget_erp5_page_form.html\n
-gadget_erp5_page_form.js\n
-gadget_erp5_page_front.html\n
-gadget_erp5_page_front.js\n
-gadget_erp5_page_history.html\n
-gadget_erp5_page_history.js\n
-gadget_erp5_page_jump.html\n
-gadget_erp5_page_jump.js\n
-gadget_erp5_page_language.html\n
-gadget_erp5_page_language.js\n
-gadget_erp5_page_logout.html\n
-gadget_erp5_page_logout.js\n
-gadget_erp5_page_preference.html\n
-gadget_erp5_page_preference.js\n
-gadget_erp5_page_relation_search.html\n
-gadget_erp5_page_relation_search.js\n
-gadget_erp5_page_search.html\n
-gadget_erp5_page_search.js\n
-gadget_erp5_page_tab.html\n
-gadget_erp5_page_tab.js\n
-gadget_erp5_page_worklist.html\n
-gadget_erp5_page_worklist.js\n
-gadget_erp5_panel.html\n
-gadget_erp5_panel.js\n
-gadget_erp5_panel.png?format=png\n
-gadget_erp5_pt_embedded_form_render.html\n
-gadget_erp5_pt_embedded_form_render.js\n
-gadget_erp5_pt_form_dialog.html\n
-gadget_erp5_pt_form_dialog.js\n
-gadget_erp5_pt_form_python_action.html\n
-gadget_erp5_pt_form_python_action.js\n
-gadget_erp5_pt_form_list.html\n
-gadget_erp5_pt_form_list.js\n
-gadget_erp5_pt_form_view.html\n
-gadget_erp5_pt_form_view.js\n
-gadget_erp5_pt_form_view_editable.html\n
-gadget_erp5_pt_form_view_editable.js\n
-gadget_erp5_pt_report_view.html\n
-gadget_erp5_pt_report_view.js\n
-gadget_erp5_router.html\n
-gadget_erp5_router.js\n
-gadget_erp5_relation_input.html\n
-gadget_erp5_relation_input.js\n
-gadget_erp5_search_editor.html\n
-gadget_erp5_search_editor.js\n
-gadget_erp5_searchfield.html\n
-gadget_erp5_searchfield.js\n
-gadget_erp5_sort_editor.html\n
-gadget_erp5_sort_editor.js\n
-gadget_global.js\n
-gadget_html5_element.html\n
-gadget_html5_element.js\n
-gadget_html5_input.html\n
-gadget_html5_input.js\n
-gadget_html5_textarea.html\n
-gadget_html5_textarea.js\n
-gadget_html5_select.html\n
-gadget_html5_select.js\n
-gadget_erp5_global.js\n
-gadget_jio.html\n
-gadget_jio.js\n
-gadget_translation.html\n
-gadget_translation.js\n
-gadget_translation_data.js\n
-gadget_editor.html\n
-gadget_editor.js\n
-gadget_button_maximize.html\n
-gadget_button_maximize.js\n
-handlebars.js\n
-domsugar.js\n
-jiodev.js\n
-renderjs.js\n
-rsvp.js\n
 NETWORK:\n
 *</string> </value>
         </item>
@@ -411,7 +247,7 @@ NETWORK:\n
                   </item>
                   <item>
                       <key> <string>serial</string> </key>
-                      <value> <string>981.59441.37027.22988</string> </value>
+                      <value> <string>982.28326.56724.47957</string> </value>
                   </item>
                   <item>
                       <key> <string>state</string> </key>
@@ -429,7 +265,7 @@ NETWORK:\n
                           </tuple>
                           <state>
                             <tuple>
-                              <float>1582043312.81</float>
+                              <float>1583940448.23</float>
                               <string>UTC</string>
                             </tuple>
                           </state>
diff --git a/bt5/erp5_web_project_ui/PathTemplateItem/web_site_module/project_management.xml b/bt5/erp5_web_project_ui/PathTemplateItem/web_site_module/project_management.xml
index 69bc9608c16db2f2c76c8720e534e2f2efef8133..5a83ba372b6ea86379b29ca20a2faccdd3ae8cd5 100644
--- a/bt5/erp5_web_project_ui/PathTemplateItem/web_site_module/project_management.xml
+++ b/bt5/erp5_web_project_ui/PathTemplateItem/web_site_module/project_management.xml
@@ -279,6 +279,26 @@
                       <value> <string>string</string> </value>
                   </item>
                 </dictionary>
+                <dictionary>
+                  <item>
+                      <key> <string>id</string> </key>
+                      <value> <string>configuration_service_worker_url</string> </value>
+                  </item>
+                  <item>
+                      <key> <string>type</string> </key>
+                      <value> <string>string</string> </value>
+                  </item>
+                </dictionary>
+                <dictionary>
+                  <item>
+                      <key> <string>id</string> </key>
+                      <value> <string>configuration_precache_manifest_script_list</string> </value>
+                  </item>
+                  <item>
+                      <key> <string>type</string> </key>
+                      <value> <string>string</string> </value>
+                  </item>
+                </dictionary>
               </tuple>
             </value>
         </item>
@@ -353,12 +373,23 @@
         </item>
         <item>
             <key> <string>configuration_manifest_url</string> </key>
-            <value> <string>gadget_erp5_project.appcache</string> </value>
+            <value>
+              <none/>
+            </value>
         </item>
         <item>
             <key> <string>configuration_panel_gadget_url</string> </key>
             <value> <string>gadget_erp5_project_panel.html</string> </value>
         </item>
+        <item>
+            <key> <string>configuration_precache_manifest_script_list</string> </key>
+            <value> <string>WebSection_getCKEditorPrecacheManifestList\n
+WebSection_getWebProjectPrecacheManifestList</string> </value>
+        </item>
+        <item>
+            <key> <string>configuration_service_worker_url</string> </key>
+            <value> <string>gadget_erp5_serviceworker.js</string> </value>
+        </item>
         <item>
             <key> <string>configuration_translation_gadget_url</string> </key>
             <value> <string>gadget_translation.html</string> </value>
diff --git a/bt5/erp5_web_project_ui/SkinTemplateItem/portal_skins/erp5_web_project/WebSection_getWebProjectPrecacheManifestList.py b/bt5/erp5_web_project_ui/SkinTemplateItem/portal_skins/erp5_web_project/WebSection_getWebProjectPrecacheManifestList.py
new file mode 100644
index 0000000000000000000000000000000000000000..62af459c1e8dda0eb0b5b9226eb933a6888da421
--- /dev/null
+++ b/bt5/erp5_web_project_ui/SkinTemplateItem/portal_skins/erp5_web_project/WebSection_getWebProjectPrecacheManifestList.py
@@ -0,0 +1,14 @@
+url_list = [
+  'handlebars.js',
+  'gadget_erp5_page_project_controller.html',
+  'gadget_erp5_page_project_controller.js',
+  'gadget_project_info.html',
+  'gadget_project_info.css',
+  'gadget_project_info.js',
+  'gadget_erp5_page_project_redirector.html',
+  'gadget_erp5_page_project_redirector.js',
+  'gadget_erp5_project_panel.html',
+  'gadget_erp5_project_panel.js',
+]
+
+return url_list
diff --git a/bt5/erp5_web_project_ui/SkinTemplateItem/portal_skins/erp5_web_project/WebSection_getWebProjectPrecacheManifestList.xml b/bt5/erp5_web_project_ui/SkinTemplateItem/portal_skins/erp5_web_project/WebSection_getWebProjectPrecacheManifestList.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03f91ecd75bb39bafff9906a587def4642bbc8f6
--- /dev/null
+++ b/bt5/erp5_web_project_ui/SkinTemplateItem/portal_skins/erp5_web_project/WebSection_getWebProjectPrecacheManifestList.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>REQUEST=None</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>WebSection_getWebProjectPrecacheManifestList</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>