diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowAction.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowAction.zpt
index cc272d633468a33fba93275df43fafe6d92a3903..33b3defe0db42307d4cb8154ba909f08be906bf1 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowAction.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowAction.zpt
@@ -51,57 +51,79 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with 2 lines, one for 2 Draft Foos, the other for 1
+<!-- we have a listbox with 3 lines, one for validation_state of all documents (draft), one for 2 Draft Foos, the other for 1
 Validated Foo -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>2 records</td>
+  <td>3 records</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>3</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
   <td>2</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[1]/a</td>
   <td>1</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[3]/a</td>
   <td>Validated</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCheckedUidSelection.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCheckedUidSelection.zpt
index 0d8d2d15d9b1b30214ea9bd57959af0294acb5e7..4adf516b3f67e77a495b83333c22cf76ec446702 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCheckedUidSelection.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCheckedUidSelection.zpt
@@ -57,35 +57,57 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with 1 line, for 1 Draft Foo -->
+<!-- we have a listbox with 2 line, for all documents by validaiton_state, and for 1 Draft Foo -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>1 records</td>
+  <td>2 records</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>1</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
   <td>1</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCustomDialog.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCustomDialog.zpt
index 4a5c816336d308db8f3b2c8076212b1873b45b43..138798a3e4aa6703008ee7fac59c353b21849eac 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCustomDialog.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionCustomDialog.zpt
@@ -51,57 +51,79 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with 2 lines, one for 2 Draft Foos, the other for 1
+<!-- we have a listbox with 3 lines, one for all Drafts by validation state, one for 2 Draft Foos, the other for 1
 Validated Foo -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>2 records</td>
+  <td>3 records</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>3</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
   <td>2</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Custom Dialog Action</td>
 </tr>
 
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[1]/a</td>
   <td>1</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[3]/a</td>
   <td>Validated</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionDomainTree.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionDomainTree.zpt
index 9bbcd3f10c03b9105ba1d3d4929292c5b3447fcf..ff8c962fba8bb189cee5cc3881418d68c4fb5f88 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionDomainTree.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionDomainTree.zpt
@@ -102,36 +102,58 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with 1 line for 2 Draft Foos -->
+<!-- we have a listbox with 2 lines, one for all documents by validation state, and one for 2 Draft Foos -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>1 records</td>
+  <td>2 records</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>2</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
 </tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
 <!-- It's the number of element which will be validate -->
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
   <td>2</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 <tr>
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionFilteredSelection.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionFilteredSelection.zpt
index 0e0ccb5f0c9292a69f9e6b38ae453103f336e1e8..0c9686bea88e18b11a28c1ccd78b27a518ca2207 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionFilteredSelection.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionFilteredSelection.zpt
@@ -62,35 +62,57 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with 1 line, for 1 Draft Foo -->
+<!-- we have a listbox with 2 line, one for all documents by validation state, one for 1 Draft Foo -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>1 records</td>
+  <td>2 records</td>
 </tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>1</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
   <td>1</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionInvertModeSelection.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionInvertModeSelection.zpt
index b8bd07b0b44b641dc9dccf224b57d505e929ae52..6160c9359b44a522117d2835216ea794661ecf02 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionInvertModeSelection.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionInvertModeSelection.zpt
@@ -64,35 +64,57 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with 1 line, for 1 Draft Foo -->
+<!-- we have a listbox with 2 lines, one for all documents by validation state, one for 1 Draft Foo -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>1 records</td>
+  <td>2 records</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>1</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
   <td>1</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionMultiplePortalType.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionMultiplePortalType.zpt
index 60a8af184d07e43e2de516708bf7ebc7be8e543e..dd72c90553bc56b6b2225c464eb3b21ab493b4f4 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionMultiplePortalType.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionMultiplePortalType.zpt
@@ -41,16 +41,16 @@
   <td>Change State</td>
 </tr>
 
-<!-- we have a listbox with too lines, one for bars one for foos -->
+<!-- we have a listbox with 4 lines, two for all documents by validation state, one for bars one for foos -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>2 records</td>
+  <td>4 records</td>
 </tr>
 
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionNothingSelected.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionNothingSelected.zpt
index 19f982676edb627ffdb418e55ac9fa83e8bf1f47..814e160c78fd65d6d907acf23f216216e2ed0833 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionNothingSelected.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionNothingSelected.zpt
@@ -77,12 +77,12 @@
 
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[5]/select</td>
   <td>label=Invalidate Action</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionPagination.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionPagination.zpt
index c786e7fe9cdd329d1e0cf9552a6955f41f7abf0a..22e9467d54ee7bf927ebac1fff2586289ba094f0 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionPagination.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionPagination.zpt
@@ -76,66 +76,101 @@ This is currently an expected failure.
   <td>//input[@class="listbox_set_page workflow_action_listbox_set_page"]</td>
   <td>\13</td>
 </tr>
-<!-- we have a listbox with 2 lines, one for 2 Draft Foos, the other for 1
+<!-- we have a listbox with 3 lines, one for all documents by validation_state, one for 2 Draft Foos, the last one for 1
 Validated Foo -->
 <tr>
   <td>assertText</td>
   <td>//span[@class="listbox-current-page-total-number workflow_action_listbox-current-page-total-number"]</td>
-  <td>2 records</td>
+  <td>3 records</td>
+</tr>
+
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>3</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+  <td>Foo</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+  <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+  <td>Foo Validation Workflow</td>
+</tr>
+
+<tr>
+  <td>type</td>
+  <td>//input[@class="listbox_set_page workflow_action_listbox_set_page"]</td>
   <td>2</td>
 </tr>
+<tr>
+  <td>keyPressAndWait</td>
+  <td>//input[@class="listbox_set_page workflow_action_listbox_set_page"]</td>
+  <td>\13</td>
+</tr>
+
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+  <td>2</td>
+</tr>
+<tr>
+  <td>assertText</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
   <td>Draft</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 <tr>
   <td>select</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[5]/select</td>
   <td>label=Validate Action</td>
 </tr>
+
 <tr>
   <td>type</td>
   <td>//input[@class="listbox_set_page workflow_action_listbox_set_page"]</td>
-  <td>2</td>
+  <td>3</td>
 </tr>
 <tr>
   <td>keyPressAndWait</td>
   <td>//input[@class="listbox_set_page workflow_action_listbox_set_page"]</td>
   <td>\13</td>
 </tr>
+
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
   <td>1</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
   <td>Foo</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
   <td>Validated</td>
 </tr>
 <tr>
   <td>assertText</td>
-  <td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+  <td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
   <td>Foo Workflow</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionWithoutConfirmationForm.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionWithoutConfirmationForm.zpt
index 28d73e272c22238b30ad9b0a3a09c7a55fd139ad..74e95b29d8ce7f86446ba302c80f9b469e6e37c7 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionWithoutConfirmationForm.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/page_templates_zuite/testFolderWorkflowActionWithoutConfirmationForm.zpt
@@ -50,56 +50,79 @@
 	<td>select_action</td>
 	<td>Change State</td>
 </tr>
-<!-- we have a listbox with 2 lines, one for 2 Draft Foos, the other for 1
+<!-- we have a listbox with 3 lines, one for all documents by validation state, one for 2 Draft Foos, the last one for 1
 Validated Foo -->
 <tr>
 	<td>assertText</td>
 	<td>//span[@class=&quot;listbox-current-page-total-number workflow_action_listbox-current-page-total-number&quot;]</td>
-	<td>2 records</td>
+	<td>3 records</td>
+</tr>
+
+<tr>
+	<td>assertText</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[1]/a</td>
+	<td>3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[2]/a</td>
+	<td>Foo</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[3]/a</td>
+	<td>Draft</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-0 ')]/td[4]/a</td>
+	<td>Foo Validation Workflow</td>
 </tr>
+
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[1]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[1]/a</td>
 	<td>2</td>
 </tr>
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[2]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[2]/a</td>
 	<td>Foo</td>
 </tr>
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[3]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[3]/a</td>
 	<td>Draft</td>
 </tr>
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[4]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[4]/a</td>
 	<td>Foo Workflow</td>
 </tr>
 <tr>
 	<td>select</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-0 DataA']/td[5]/select</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-1 ')]/td[5]/select</td>
 	<td>label=Custom Action No Dialog</td>
 </tr>
+
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[1]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[1]/a</td>
 	<td>1</td>
 </tr>
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[2]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[2]/a</td>
 	<td>Foo</td>
 </tr>
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[3]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[3]/a</td>
 	<td>Validated</td>
 </tr>
 <tr>
 	<td>assertText</td>
-	<td>//tr[@class='workflow_action_listbox-data-line-1 DataB']/td[4]/a</td>
+	<td>//tr[contains(concat(' ',normalize-space(@class),' '),' workflow_action_listbox-data-line-2 ')]/td[4]/a</td>
 	<td>Foo Workflow</td>
 </tr>
 <tr>
diff --git a/bt5/erp5_ui_test/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml b/bt5/erp5_ui_test/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
index 55b2efd4d2b39f569c7eb9a3e7c68ce7332db443..18945ee6615fad360758a9a5bd6e8afb9e66cc33 100644
--- a/bt5/erp5_ui_test/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
+++ b/bt5/erp5_ui_test/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
@@ -1,11 +1,11 @@
 <workflow_chain>
  <chain>
   <type>Bar</type>
-  <workflow>edit_workflow, foo_workflow</workflow>
+  <workflow>edit_workflow, foo_workflow, bar_validation_workflow</workflow>
  </chain>
  <chain>
   <type>Foo</type>
-  <workflow>edit_workflow, foo_workflow</workflow>
+  <workflow>edit_workflow, foo_workflow, foo_validation_workflow</workflow>
  </chain>
  <chain>
   <type>Foo Line</type>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79bc3cee68da3e15e5a51786f06332a8db7ac512
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DCWorkflowDefinition" module="Products.DCWorkflow.DCWorkflow"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>creation_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>bar_validation_workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>initial_state</string> </key>
+            <value> <string>draft</string> </value>
+        </item>
+        <item>
+            <key> <string>manager_bypass</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>Access contents information</string>
+                <string>View</string>
+                <string>Add portal content</string>
+                <string>Modify portal content</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>state_var</string> </key>
+            <value> <string>validation_state</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Bar Validation Workflow</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/scripts.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/scripts.xml
new file mode 100644
index 0000000000000000000000000000000000000000..072c8f6540c07806bee17a34c920ec09b2de1bd5
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/scripts.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Scripts" module="Products.DCWorkflow.Scripts"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>scripts</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states.xml
new file mode 100644
index 0000000000000000000000000000000000000000..27ec9069024e0f59bf4b612113789f37da98879b
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="States" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>states</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/draft.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/draft.xml
new file mode 100644
index 0000000000000000000000000000000000000000..202a80904d47302ab75bc55619775bc68c5d448a
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/draft.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="StateDefinition" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>draft</string> </value>
+        </item>
+        <item>
+            <key> <string>permission_roles</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Draft</string> </value>
+        </item>
+        <item>
+            <key> <string>transitions</string> </key>
+            <value>
+              <tuple>
+                <string>really_validate</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_list</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="PersistentMapping" module="Persistence.mapping"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>data</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>Access contents information</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>Add portal content</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>Modify portal content</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>View</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/invalidated.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/invalidated.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5df083c57d94386251dee3e85d23bb833a0b3d2a
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/invalidated.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="StateDefinition" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Purposedly using the wrong title for translation testing !</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Validated</string> </value>
+        </item>
+        <item>
+            <key> <string>transitions</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_list</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/validated.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/validated.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ed61920930aa34833b6dd163514aabcc8f6d714
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/states/validated.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="StateDefinition" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Purposedly using the wrong title for translation testing !</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>validated</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>transitions</string> </key>
+            <value>
+              <tuple>
+                <string>really_invalidate</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_list</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa36144efed916b804f5f80df9452b1e3166bdec
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Transitions" module="Products.DCWorkflow.Transitions"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>transitions</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions/really_invalidate.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions/really_invalidate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..00ea7b61c0e83e8dd0c17cd6d126f0d8ec535c24
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions/really_invalidate.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>actbox_category</string> </key>
+            <value> <string>workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_url</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>after_script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>action that will mark the document as invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>guard</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>really_invalidate</string> </value>
+        </item>
+        <item>
+            <key> <string>new_state_id</string> </key>
+            <value> <string>invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Invalidate</string> </value>
+        </item>
+        <item>
+            <key> <string>trigger_type</string> </key>
+            <value> <int>2</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Guard" module="Products.DCWorkflow.Guard"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>Modify portal content</string>
+              </tuple>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions/really_validate.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions/really_validate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed10c813ba1cdc68bb2f2be9b7bd50fb07999bec
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/transitions/really_validate.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>actbox_category</string> </key>
+            <value> <string>workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_url</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>after_script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>action that will mark the document as validated</string> </value>
+        </item>
+        <item>
+            <key> <string>guard</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>really_validate</string> </value>
+        </item>
+        <item>
+            <key> <string>new_state_id</string> </key>
+            <value> <string>validated</string> </value>
+        </item>
+        <item>
+            <key> <string>script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Validate</string> </value>
+        </item>
+        <item>
+            <key> <string>trigger_type</string> </key>
+            <value> <int>2</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Guard" module="Products.DCWorkflow.Guard"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>Modify portal content</string>
+              </tuple>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bb12bef805f190ec50e023368d6ee5c6c990b816
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Variables" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>variables</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/action.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/action.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e373627980318315c844dfbb3d6507d12eca323
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/action.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>The last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>action</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>transition/getId|nothing</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/actor.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/actor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e1833e177cdd606417106d9ddcbfe4a739432805
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/actor.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>The name of the user who performed the last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>actor</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>user/getIdOrUserName</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/comment.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/comment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e22869e0c27d2b9ff5fbec5a5ee0c4eb20d6a99f
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/comment.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Comments about the last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>comment</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>python:state_change.kwargs.get(\'comment\', \'\')</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/custom_workflow_variable.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/custom_workflow_variable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..12c773d1197242088395c382046ed90befa03bf9
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/custom_workflow_variable.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>custom_workflow_variable</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/error_message.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/error_message.xml
new file mode 100644
index 0000000000000000000000000000000000000000..535863de2a26221cff2a356674852ea83bcee061
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/error_message.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Error message if validation failed</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>error_message</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/history.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/history.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c6cb030d70498f69546f62d557ba71a63476ff8a
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/history.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Provides access to workflow history</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>history</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>state_change/getHistory</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/time.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/time.xml
new file mode 100644
index 0000000000000000000000000000000000000000..adc65b1ab7464d566e2a29974dbbcccb0a80fb0d
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/variables/time.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Time of the last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>time</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>state_change/getDateTime</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/worklists.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/worklists.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c3432aa051eac2d67ec0692a384adb38d1b6bac8
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/bar_validation_workflow/worklists.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Worklists" module="Products.DCWorkflow.Worklists"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>worklists</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..900fce17370b32ef2eddb7af473882c4accb698d
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DCWorkflowDefinition" module="Products.DCWorkflow.DCWorkflow"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>creation_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>foo_validation_workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>initial_state</string> </key>
+            <value> <string>draft</string> </value>
+        </item>
+        <item>
+            <key> <string>manager_bypass</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>Access contents information</string>
+                <string>View</string>
+                <string>Add portal content</string>
+                <string>Modify portal content</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>state_var</string> </key>
+            <value> <string>validation_state</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Foo Validation Workflow</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/scripts.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/scripts.xml
new file mode 100644
index 0000000000000000000000000000000000000000..072c8f6540c07806bee17a34c920ec09b2de1bd5
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/scripts.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Scripts" module="Products.DCWorkflow.Scripts"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>scripts</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states.xml
new file mode 100644
index 0000000000000000000000000000000000000000..27ec9069024e0f59bf4b612113789f37da98879b
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="States" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>states</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/draft.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/draft.xml
new file mode 100644
index 0000000000000000000000000000000000000000..202a80904d47302ab75bc55619775bc68c5d448a
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/draft.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="StateDefinition" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>draft</string> </value>
+        </item>
+        <item>
+            <key> <string>permission_roles</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Draft</string> </value>
+        </item>
+        <item>
+            <key> <string>transitions</string> </key>
+            <value>
+              <tuple>
+                <string>really_validate</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_list</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="PersistentMapping" module="Persistence.mapping"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>data</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>Access contents information</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>Add portal content</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>Modify portal content</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>View</string> </key>
+                    <value>
+                      <tuple>
+                        <string>Author</string>
+                        <string>Manager</string>
+                        <string>Member</string>
+                      </tuple>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/invalidated.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/invalidated.xml
new file mode 100644
index 0000000000000000000000000000000000000000..477ff446390ea2e496847f7fa22866374623905b
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/invalidated.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="StateDefinition" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>transitions</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_list</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/validated.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/validated.xml
new file mode 100644
index 0000000000000000000000000000000000000000..042fdbdf6e7c433813b88e0521bdeaa7c4a229cc
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/states/validated.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="StateDefinition" module="Products.DCWorkflow.States"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>validated</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Validated</string> </value>
+        </item>
+        <item>
+            <key> <string>transitions</string> </key>
+            <value>
+              <tuple>
+                <string>really_invalidate</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_list</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa36144efed916b804f5f80df9452b1e3166bdec
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Transitions" module="Products.DCWorkflow.Transitions"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>transitions</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions/really_invalidate.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions/really_invalidate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..00ea7b61c0e83e8dd0c17cd6d126f0d8ec535c24
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions/really_invalidate.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>actbox_category</string> </key>
+            <value> <string>workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_url</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>after_script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>action that will mark the document as invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>guard</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>really_invalidate</string> </value>
+        </item>
+        <item>
+            <key> <string>new_state_id</string> </key>
+            <value> <string>invalidated</string> </value>
+        </item>
+        <item>
+            <key> <string>script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Invalidate</string> </value>
+        </item>
+        <item>
+            <key> <string>trigger_type</string> </key>
+            <value> <int>2</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Guard" module="Products.DCWorkflow.Guard"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>Modify portal content</string>
+              </tuple>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions/really_validate.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions/really_validate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed10c813ba1cdc68bb2f2be9b7bd50fb07999bec
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/transitions/really_validate.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>actbox_category</string> </key>
+            <value> <string>workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_url</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>after_script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>action that will mark the document as validated</string> </value>
+        </item>
+        <item>
+            <key> <string>guard</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>really_validate</string> </value>
+        </item>
+        <item>
+            <key> <string>new_state_id</string> </key>
+            <value> <string>validated</string> </value>
+        </item>
+        <item>
+            <key> <string>script_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Validate</string> </value>
+        </item>
+        <item>
+            <key> <string>trigger_type</string> </key>
+            <value> <int>2</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Guard" module="Products.DCWorkflow.Guard"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>Modify portal content</string>
+              </tuple>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bb12bef805f190ec50e023368d6ee5c6c990b816
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Variables" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>variables</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/action.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/action.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e373627980318315c844dfbb3d6507d12eca323
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/action.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>The last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>action</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>transition/getId|nothing</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/actor.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/actor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e1833e177cdd606417106d9ddcbfe4a739432805
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/actor.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>The name of the user who performed the last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>actor</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>user/getIdOrUserName</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/comment.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/comment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e22869e0c27d2b9ff5fbec5a5ee0c4eb20d6a99f
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/comment.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Comments about the last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>comment</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>python:state_change.kwargs.get(\'comment\', \'\')</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/custom_workflow_variable.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/custom_workflow_variable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..12c773d1197242088395c382046ed90befa03bf9
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/custom_workflow_variable.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>custom_workflow_variable</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/error_message.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/error_message.xml
new file mode 100644
index 0000000000000000000000000000000000000000..535863de2a26221cff2a356674852ea83bcee061
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/error_message.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Error message if validation failed</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>error_message</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/history.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/history.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c6cb030d70498f69546f62d557ba71a63476ff8a
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/history.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Provides access to workflow history</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>history</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>state_change/getHistory</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/time.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/time.xml
new file mode 100644
index 0000000000000000000000000000000000000000..adc65b1ab7464d566e2a29974dbbcccb0a80fb0d
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/variables/time.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="VariableDefinition" module="Products.DCWorkflow.Variables"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>default_expr</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>default_value</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>Time of the last transition</string> </value>
+        </item>
+        <item>
+            <key> <string>for_catalog</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>for_status</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>time</string> </value>
+        </item>
+        <item>
+            <key> <string>info_guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.CMFCore.Expression</string>
+          <string>Expression</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>state_change/getDateTime</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/worklists.xml b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/worklists.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c3432aa051eac2d67ec0692a384adb38d1b6bac8
--- /dev/null
+++ b/bt5/erp5_ui_test/WorkflowTemplateItem/portal_workflow/foo_validation_workflow/worklists.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Worklists" module="Products.DCWorkflow.Worklists"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_mapping</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>worklists</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/bt/template_portal_type_workflow_chain_list b/bt5/erp5_ui_test/bt/template_portal_type_workflow_chain_list
index a1651d79db3bb683d1b3fdf3f61a0fa6f4ab9288..f1b869ce54262068fa1bd84c6b70383b168c09e7 100644
--- a/bt5/erp5_ui_test/bt/template_portal_type_workflow_chain_list
+++ b/bt5/erp5_ui_test/bt/template_portal_type_workflow_chain_list
@@ -1,5 +1,7 @@
 Bar | edit_workflow
 Bar | foo_workflow
+Bar | bar_validation_workflow
 Foo Line | pricing_interaction_workflow
 Foo | edit_workflow
-Foo | foo_workflow
\ No newline at end of file
+Foo | foo_workflow
+Foo | foo_valiation_workflow
\ No newline at end of file
diff --git a/bt5/erp5_ui_test/bt/template_workflow_id_list b/bt5/erp5_ui_test/bt/template_workflow_id_list
index a5c60b2aaf6bcea9dc18e5b7a0b0896b839ca07b..1f124af28b04b768085ed34990a621caee6289e9 100644
--- a/bt5/erp5_ui_test/bt/template_workflow_id_list
+++ b/bt5/erp5_ui_test/bt/template_workflow_id_list
@@ -1 +1,3 @@
-foo_workflow
\ No newline at end of file
+bar_validation_workflow
+foo_workflow
+foo_validation_workflow
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..26dfecb9b61d2f155deda9473dfcb2836aef215b
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='causality_state',
+  message_context='causality_state',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..341ab5b47e5736bf8da201e85e65d76a5de03252
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedCausalityStateQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..19fa212bcef0c39348f2b56d7989d6c209bb8a71
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='causality_state',
+  message_context='causality_state_title',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33f916865958ab09ff168cea2e7149cbe6aee9a8
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedCausalityStateTitleQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..340beeaf7059a8ad29845b2192f310fe1fd13103
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='opportunity_state',
+  message_context='opportunity_state',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..693a450e8a28a143b69b155f9c351c1dad260d51
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedOpportunityStateQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..babc50b4ee4759b218c358ab5d22cd3f552d87dd
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='opportunity_state',
+  message_context='opportunity_state_title',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..68bb937e5286b4d84609dc10cf2ac01f1249b160
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedOpportunityStateTitleQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..d4e3a9d0824fd920aeab7f1870b665b8d6a5eb32
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.py
@@ -0,0 +1,20 @@
+from Products.ZSQLCatalog.SQLCatalog import SimpleQuery
+operator_value_dict, logical_operator, _ = search_key.processSearchValue(
+  detect_like=True,
+  search_value=search_value,
+  default_logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
+row_list = context.SQLCatalog_zSearchTranslation(
+  language=context.getPortalObject().Localizer.get_selected_language(),
+  message_context='portal_type',
+  logical_operator=logical_operator,
+  translated_message_dict=operator_value_dict,
+)
+if row_list:
+  return SimpleQuery(
+    group=group,
+    portal_type=list({x.portal_type for x in row_list}),
+  )
+# No translation, match nothing.
+return SimpleQuery(uid=-1)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f86fa3495efaed851c79e682341810ad1969f64
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedPortalTypeQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..9aff5abc26f989045d4fe8d6dfbc0c4c257bdeff
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='simulation_state',
+  message_context='simulation_state',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b185046f0eb2ee27757d57cbb8846cacfa27dfd
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedSimulationStateQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c36a29ae22dcbd4cdd0e3faf40a29d6a94287d8
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='simulation_state',
+  message_context='simulation_state_title',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..938bcf5a4787ba6fd66180c4494658901da5ff3c
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedSimulationStateTitleQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..47e44bfdc5f6a3418b52b1939240951522fda3e3
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='validation_state',
+  message_context='validation_state',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..af21392f65be1eb48944e05fe482992521f71f9a
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedValidationStateQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..b71b76f0bff4c3b43de9afb92bb02586fcdcdbff
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.py
@@ -0,0 +1,9 @@
+return context.SQLCatalog_makeTranslationQuery(
+  search_value=search_value,
+  column_id='validation_state',
+  message_context='validation_state_title',
+  search_key=search_key,
+  group=group,
+  logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1cc9ba3de9de540741c5350f93c837abea28d439
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslatedValidationStateTitleQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.py b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.py
new file mode 100644
index 0000000000000000000000000000000000000000..fe8f0240a0b499a2c827bce7d48dcee9605f1b29
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.py
@@ -0,0 +1,37 @@
+from collections import defaultdict
+from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
+operator_value_dict, logical_operator, _ = search_key.processSearchValue(
+  detect_like=True,
+  search_value=search_value,
+  default_logical_operator=logical_operator,
+  comparison_operator=comparison_operator,
+)
+original_message_dict = defaultdict(set)
+for row in context.SQLCatalog_zSearchTranslation(
+  language=context.getPortalObject().Localizer.get_selected_language(),
+  message_context=message_context,
+  logical_operator=logical_operator,
+  translated_message_dict=operator_value_dict,
+):
+  original_message_dict[row.original_message].add(row.portal_type)
+query_list = [
+  ComplexQuery(
+    SimpleQuery(
+      group=group,
+      comparison_operator='=',
+      **{column_id: original_message}
+    ),
+    SimpleQuery(
+      group=group,
+      portal_type=list(portal_type_set),
+    ),
+    logical_operator='and',
+  )
+  for original_message, portal_type_set in original_message_dict.iteritems()
+]
+if len(query_list) == 1:
+  return query_list[0]
+if query_list:
+  return ComplexQuery(query_list, logical_operator='or')
+# No translation, match nothing.
+return SimpleQuery(uid=-1)
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b4da2584a49e19cc264fd4ec18b9a31eddfd14b2
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_makeTranslationQuery.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Python Script" module="erp5.portal_type"/>
+    </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>search_value, column_id, message_context, search_key=None, group=None, logical_operator=None, comparison_operator=None</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_makeTranslationQuery</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Python Script</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.catalog_keys.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.catalog_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a540f9431e9c394244ed71562b197938e6fe9258
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.catalog_keys.xml
@@ -0,0 +1,2 @@
+<catalog_method>
+</catalog_method>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.sql b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1fa9e6ff845f358490259b61ebbff2a8f7a96767
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.sql
@@ -0,0 +1,30 @@
+SELECT original_message, portal_type
+FROM translation
+<dtml-sqlgroup where>
+  <dtml-sqltest language type="string" op="eq"> <dtml-and>
+  <dtml-sqltest message_context type="string" op="eq"> <dtml-and>
+  <dtml-sqlgroup>
+    <dtml-if expr="'=' in translated_message_dict">
+      <dtml-sqltest column="translated_message" type="string" op="eq" expr="translated_message_dict['=']" multiple> <dtml-var logical_operator>
+    </dtml-if>
+    <dtml-if expr="'!=' in translated_message_dict">
+      <dtml-sqltest column="translated_message" type="string" op="ne" expr="translated_message_dict['!=']" multiple> <dtml-var logical_operator>
+    </dtml-if>
+    <dtml-if expr="'<' in translated_message_dict"><dtml-in expr="translated_message_dict['<']" prefix="value">
+      <dtml-sqltest column="translated_message" type="string" op="lt" expr="value_item"> <dtml-var logical_operator>
+    </dtml-in></dtml-if>
+    <dtml-if expr="'<=' in translated_message_dict"><dtml-in expr="translated_message_dict['<=']" prefix="value">
+      <dtml-sqltest column="translated_message" type="string" op="le" expr="value_item"> <dtml-var logical_operator>
+    </dtml-in></dtml-if>
+    <dtml-if expr="'>' in translated_message_dict"><dtml-in expr="translated_message_dict['>']" prefix="value">
+      <dtml-sqltest column="translated_message" type="string" op="gt" expr="value_item"> <dtml-var logical_operator>
+    </dtml-in></dtml-if>
+    <dtml-if expr="'>=' in translated_message_dict"><dtml-in expr="translated_message_dict['>=']" prefix="value">
+      <dtml-sqltest column="translated_message" type="string" op="ge" expr="value_item"> <dtml-var logical_operator>
+    </dtml-in></dtml-if>
+    <dtml-if expr="'like' in translated_message_dict"><dtml-in expr="translated_message_dict['like']" prefix="value">
+      <dtml-sqltest column="translated_message" type="string" op="like" expr="value_item"> <dtml-var logical_operator>
+    </dtml-in></dtml-if>
+    <dtml-if expr="logical_operator == 'and'">1<dtml-else>0</dtml-if>
+  </dtml-sqlgroup>
+</dtml-sqlgroup>
\ No newline at end of file
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d45b14280ee0410230d9653662a32edf474707f2
--- /dev/null
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/SQLCatalog_zSearchTranslation.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="SQL Method" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>allow_simple_one_argument_traversal</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>arguments_src</string> </key>
+            <value> <string>language\n
+message_context\n
+logical_operator\n
+translated_message_dict</string> </value>
+        </item>
+        <item>
+            <key> <string>class_file_</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>class_name_</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>connection_id</string> </key>
+            <value> <string>erp5_sql_connection</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SQLCatalog_zSearchTranslation</string> </value>
+        </item>
+        <item>
+            <key> <string>max_rows_</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>SQL Method</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>SQLCatalog_zSearchTranslation</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogScriptableKeyTemplateItem/scriptable_key_list.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogScriptableKeyTemplateItem/scriptable_key_list.xml
index 9d9d3b34680c5230251c55fc53c2c2823a66dc15..8faa66bac1a14c29d3bf842edf2841f547f3ce31 100644
--- a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogScriptableKeyTemplateItem/scriptable_key_list.xml
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogScriptableKeyTemplateItem/scriptable_key_list.xml
@@ -3,5 +3,14 @@
  <key>full_text | SQLCatalog_makeFullTextQuery</key>
  <key>quick_search_text | SQLCatalog_makeQuickSearchQuery</key>
  <key>search_text | SQLCatalog_makeSearchTextQuery</key>
+ <key>translated_causality_state | SQLCatalog_makeTranslatedCausalityStateQuery</key>
+ <key>translated_causality_state_title | SQLCatalog_makeTranslatedCausalityStateTitleQuery</key>
+ <key>translated_opportunity_state | SQLCatalog_makeTranslatedOpportunityStateQuery</key>
+ <key>translated_opportunity_state_title | SQLCatalog_makeTranslatedOpportunityStateTitleQuery</key>
+ <key>translated_portal_type | SQLCatalog_makeTranslatedPortalTypeQuery</key>
+ <key>translated_simulation_state | SQLCatalog_makeTranslatedSimulationStateQuery</key>
+ <key>translated_simulation_state_title | SQLCatalog_makeTranslatedSimulationStateTitleQuery</key>
  <key>translated_title | SQLCatalog_makeTranslatedTitleQuery</key>
+ <key>translated_validation_state | SQLCatalog_makeTranslatedValidationStateQuery</key>
+ <key>translated_validation_state_title | SQLCatalog_makeTranslatedValidationStateTitleQuery</key>
 </key_list>
\ No newline at end of file
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_method_id_list b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_method_id_list
index 2d0d43240b84e7dcd95592d6213ba714f47ab30c..8ebd5730e32f556fefc0b77730831536324e0e8b 100644
--- a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_method_id_list
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_method_id_list
@@ -3,8 +3,19 @@ erp5_mysql_innodb/SQLCatalog_catalogTransformationList
 erp5_mysql_innodb/SQLCatalog_getDocumentValueList
 erp5_mysql_innodb/SQLCatalog_makeQuickSearchQuery
 erp5_mysql_innodb/SQLCatalog_makeSearchTextQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedCausalityStateTitleQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedOpportunityStateTitleQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedPortalTypeQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedSimulationStateTitleQuery
 erp5_mysql_innodb/SQLCatalog_makeTranslatedTitleQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslatedValidationStateTitleQuery
+erp5_mysql_innodb/SQLCatalog_makeTranslationQuery
 erp5_mysql_innodb/SQLCatalog_zGetDocumentValueList
+erp5_mysql_innodb/SQLCatalog_zSearchTranslation
 erp5_mysql_innodb/z0_drop_alarm
 erp5_mysql_innodb/z0_drop_catalog
 erp5_mysql_innodb/z0_drop_category
diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_scriptable_key_list b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_scriptable_key_list
index db22494ec8f09578e050d6e20232c833a847daa5..badbc8c3983045577b6c5333d22e174123f0b3e4 100644
--- a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_scriptable_key_list
+++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/template_catalog_scriptable_key_list
@@ -2,4 +2,13 @@ quick_search_text | SQLCatalog_makeQuickSearchQuery
 advanced_search_text | SQLCatalog_makeQuickSearchQuery
 full_text | SQLCatalog_makeFullTextQuery
 search_text | SQLCatalog_makeSearchTextQuery
-translated_title | SQLCatalog_makeTranslatedTitleQuery
\ No newline at end of file
+translated_title | SQLCatalog_makeTranslatedTitleQuery
+translated_simulation_state_title | SQLCatalog_makeTranslatedSimulationStateTitleQuery
+translated_validation_state_title | SQLCatalog_makeTranslatedValidationStateTitleQuery
+translated_simulation_state | SQLCatalog_makeTranslatedSimulationStateQuery
+translated_validation_state | SQLCatalog_makeTranslatedValidationStateQuery
+translated_portal_type | SQLCatalog_makeTranslatedPortalTypeQuery
+translated_causality_state | SQLCatalog_makeTranslatedCausalityStateQuery
+translated_causality_state_title | SQLCatalog_makeTranslatedCausalityStateTitleQuery
+translated_opportunity_state | SQLCatalog_makeTranslatedOpportunityStateQuery
+translated_opportunity_state_title | SQLCatalog_makeTranslatedOpportunityStateTitleQuery
\ No newline at end of file
diff --git a/product/ERP5Form/tests/testGUIwithSecurity.py b/product/ERP5Form/tests/testGUIwithSecurity.py
index 0389824647e419b9575bf5436cbbd60943bb8493..4fec5e6b5d7b2660cdefbbbd05b2280c5d9c0f9c 100644
--- a/product/ERP5Form/tests/testGUIwithSecurity.py
+++ b/product/ERP5Form/tests/testGUIwithSecurity.py
@@ -162,3 +162,59 @@ class TestGUISecurity(ERP5TypeTestCase):
     self.loginAs() # user without permission to access protected property
     self.assertNotIn(protected_property_markup, self.portal.foo_module.foo.Foo_viewSecurity())
 
+  def test_translated_state_title_lookup(self):
+    """
+    Tests that looking up document which have the same translated state title
+    but different states are found, and conversely same state document but with
+    different title are not found.
+
+    Note: not testing security, but here because this is one of the rare unit
+    tests which install erp5_ui_test.
+    """
+    self.login()
+    portal = self.portal
+    newContent = portal.foo_bar_module.newContent
+    foo_1 = newContent(portal_type='Foo')
+    foo_1.reallyValidate()
+    foo_2 = newContent(portal_type='Foo')
+    foo_2.reallyValidate()
+    foo_2.reallyInvalidate()
+    bar_1 = newContent(portal_type='Bar')
+    bar_1.reallyValidate()
+    bar_2 = newContent(portal_type='Bar')
+    bar_2.reallyValidate()
+    bar_2.reallyInvalidate()
+    # Test sanity checks:
+    # - Foo: "correct" title
+    self.assertEqual(foo_1.getTranslatedValidationStateTitle(), 'Validated')
+    self.assertEqual(foo_2.getTranslatedValidationStateTitle(), 'Invalidated')
+    # - Bar: reversed title
+    self.assertEqual(bar_1.getTranslatedValidationStateTitle(), 'Invalidated')
+    self.assertEqual(bar_2.getTranslatedValidationStateTitle(), 'Validated')
+    self.tic()
+    self.assertItemsEqual(
+      portal.portal_catalog(
+        select_list=['translated_validation_state_title'],
+        uid=[
+          foo_1.getUid(),
+          foo_2.getUid(),
+          bar_1.getUid(),
+          bar_2.getUid(),
+        ],
+        translated_validation_state_title='Validat%',
+        # Note: not actually tested, just checking nothing raises when this is
+        # provided.
+        sort_on=(('translated_validation_state_title', 'ASC'), ),
+      ).dictionaries(),
+      [
+        {
+          'path': foo_1.getPath(),
+          'uid': foo_1.getUid(),
+          'translated_validation_state_title': 'Validated',
+        }, {
+          'path': bar_2.getPath(),
+          'uid': bar_2.getUid(),
+          'translated_validation_state_title': 'Validated',
+        }
+      ],
+    )