diff --git a/product/ERP5/Document/SimulationMovement.py b/product/ERP5/Document/SimulationMovement.py
index 4f0a35a4ec306ccba128824ab762485f82512d1a..3154b5781274f26264173a1da304321c39a5684c 100644
--- a/product/ERP5/Document/SimulationMovement.py
+++ b/product/ERP5/Document/SimulationMovement.py
@@ -716,7 +716,7 @@ class SimulationMovement(PropertyRecordableMixin, Movement, ExplainableMixin):
     catalog_simulation_movement_list = portal_catalog(
       portal_type='Simulation Movement',
       causality_uid=[p.getUid() for p in remaining_path_set],
-      path='%s/%%' % self.getPath())
+      path='%s/%%' % self.getPath().replace('_', r'\_'))
 
     for movement in catalog_simulation_movement_list:
       path = movement.getCausalityValue()
diff --git a/product/ERP5/ExplanationCache.py b/product/ERP5/ExplanationCache.py
index 2521fd867841697a94f0715858098275d6c80b2b..9df8bdd54d3b5daf11d241d9de81415ec1922851 100644
--- a/product/ERP5/ExplanationCache.py
+++ b/product/ERP5/ExplanationCache.py
@@ -137,7 +137,7 @@ class ExplanationCache:
         if not isinstance(value, dict):
           # We have a real root
           result.append('%s/%s' % (prefix, key))
-          result.append('%s/%s/%%' % (prefix, key))
+          result.append(('%s/%s/%%' % (prefix, key)).replace('_', r'\_'))
           # XXX-JPS here we must add all parent movements XXX-JPS
         else:
           browsePathDict('%s/%s' % (prefix, key), value) # Recursing with string append is slow XXX-JPS
@@ -262,7 +262,7 @@ class ExplanationCache:
         if simulation_path.startswith(path):
           # Only keep a path pattern which matches current simulation movement
           path_set.add(path)
-          path_set.add("%s/%%" % path)
+          path_set.add("%s/%%" % path.replace('_', r'\_'))
 
     # Lookup in cache based on path_tuple
     path_tuple = tuple(path_set) # XXX-JPS is the order guaranteed here ?
diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_getRelatedDocumentList.xml b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_getRelatedDocumentList.xml
index 85ed6d6674394aec30013059287966a580f46831..26f1c7646112012aaaa06e88591fb9d4a9f3caea 100644
--- a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_getRelatedDocumentList.xml
+++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_getRelatedDocumentList.xml
@@ -58,7 +58,7 @@ follow_up_related_document_list = portal_catalog(\n
            portal_type=portal_type,\n
            follow_up_uid=context.getUid(), **kw)\n
 \n
-kw[\'query\'] = Query(relative_url=\'%s/%%\' % context.getRelativeUrl())\n
+kw[\'query\'] = Query(relative_url=\'%s/%%\' % context.getRelativeUrl().replace(\'_\', r\'\\_\'))\n
 if follow_up_related_document_list:\n
   kw[\'query\'] = ComplexQuery(\n
     kw[\'query\'],\n
diff --git a/product/ERP5/bootstrap/erp5_core/bt/revision b/product/ERP5/bootstrap/erp5_core/bt/revision
index 976723a00c94cb6b58162f8e1e889bb7b435656a..e8f93305117031d99b25644f5d1313c5466729cb 100644
--- a/product/ERP5/bootstrap/erp5_core/bt/revision
+++ b/product/ERP5/bootstrap/erp5_core/bt/revision
@@ -1 +1 @@
-41041
\ No newline at end of file
+41042
\ No newline at end of file